diff -Nrc3pad gcc-3.0/.brik gcc-3.0.1/.brik *** gcc-3.0/.brik Sun Jun 17 13:35:41 2001 --- gcc-3.0.1/.brik Sun Aug 19 22:50:26 2001 *************** *** 3,29 **** # CRC-32 filename # ------ -------- ! 3474192430b ./.cvsignore ! 3926918363b ./BUGS 2171125041b ./COPYING 508743035b ./COPYING.LIB ! 1397497917b ./ChangeLog ! 2199726871b ./FAQ ! 2208327612b ./GNATS 2229468985b ./INSTALL/README ! 2242367380b ./INSTALL/binaries.html ! 1036297750b ./INSTALL/build.html ! 2769898142b ./INSTALL/configure.html ! 1916421468b ./INSTALL/download.html ! 815314669b ./INSTALL/finalinstall.html ! 3582470441b ./INSTALL/index.html ! 1801445129b ./INSTALL/specific.html ! 3749613216b ./INSTALL/test.html ! 3369470533b ./MAINTAINERS 253028645b ./Makefile.in 3697693037b ./README 3461973635b ./boehm-gc/BCC_MAKEFILE ! 2080733590b ./boehm-gc/ChangeLog 4012707064b ./boehm-gc/EMX_MAKEFILE 145946109b ./boehm-gc/MacOS.c 591574792b ./boehm-gc/MacProjects.sit.hqx --- 3,30 ---- # CRC-32 filename # ------ -------- ! 4294967295b ./.brik ! 2864072627b ./.cvsignore ! 873677691b ./BUGS 2171125041b ./COPYING 508743035b ./COPYING.LIB ! 226845448b ./ChangeLog ! 4244897222b ./FAQ ! 3826647863b ./GNATS 2229468985b ./INSTALL/README ! 3837555366b ./INSTALL/binaries.html ! 3242873726b ./INSTALL/build.html ! 3927920424b ./INSTALL/configure.html ! 1964338015b ./INSTALL/download.html ! 2951706212b ./INSTALL/finalinstall.html ! 4063529934b ./INSTALL/index.html ! 1238341873b ./INSTALL/specific.html ! 2369737775b ./INSTALL/test.html ! 3015795079b ./MAINTAINERS 253028645b ./Makefile.in 3697693037b ./README 3461973635b ./boehm-gc/BCC_MAKEFILE ! 227979088b ./boehm-gc/ChangeLog 4012707064b ./boehm-gc/EMX_MAKEFILE 145946109b ./boehm-gc/MacOS.c 591574792b ./boehm-gc/MacProjects.sit.hqx *************** *** 35,41 **** 2062393541b ./boehm-gc/Makefile.am 2362359874b ./boehm-gc/Makefile.dist 1527083461b ./boehm-gc/Makefile.dj ! 2698683834b ./boehm-gc/Makefile.in 221737275b ./boehm-gc/NT_MAKEFILE 3485810529b ./boehm-gc/NT_THREADS_MAKEFILE 1470223144b ./boehm-gc/OS2_MAKEFILE --- 36,42 ---- 2062393541b ./boehm-gc/Makefile.am 2362359874b ./boehm-gc/Makefile.dist 1527083461b ./boehm-gc/Makefile.dj ! 3030006705b ./boehm-gc/Makefile.in 221737275b ./boehm-gc/NT_MAKEFILE 3485810529b ./boehm-gc/NT_THREADS_MAKEFILE 1470223144b ./boehm-gc/OS2_MAKEFILE *************** *** 58,65 **** 2463868610b ./boehm-gc/SCoptions.amiga 2178285379b ./boehm-gc/SMakefile.amiga 1086659516b ./boehm-gc/WCC_MAKEFILE ! 1864955838b ./boehm-gc/acinclude.m4 ! 2842903934b ./boehm-gc/aclocal.m4 4022851412b ./boehm-gc/add_gc_prefix.c 3675915241b ./boehm-gc/allchblk.c 3500671031b ./boehm-gc/alloc.c --- 59,66 ---- 2463868610b ./boehm-gc/SCoptions.amiga 2178285379b ./boehm-gc/SMakefile.amiga 1086659516b ./boehm-gc/WCC_MAKEFILE ! 3243366834b ./boehm-gc/acinclude.m4 ! 2107795540b ./boehm-gc/aclocal.m4 4022851412b ./boehm-gc/add_gc_prefix.c 3675915241b ./boehm-gc/allchblk.c 3500671031b ./boehm-gc/alloc.c *************** *** 69,75 **** 4184632247b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs 3725131560b ./boehm-gc/checksums.c ! 3990870037b ./boehm-gc/configure 202677859b ./boehm-gc/configure.host 1706589819b ./boehm-gc/configure.in 697594862b ./boehm-gc/cord/README --- 70,76 ---- 4184632247b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs 3725131560b ./boehm-gc/checksums.c ! 482688713b ./boehm-gc/configure 202677859b ./boehm-gc/configure.host 1706589819b ./boehm-gc/configure.in 697594862b ./boehm-gc/cord/README *************** *** 166,177 **** 3707632643b ./boehm-gc/version.h 2262051120b ./boehm-gc/weakpointer.h 4042937657b ./boehm-gc/win32_threads.c ! 2924823888b ./bugs.html 3139906847b ./config-ml.in 1152210207b ./config.guess 3430029098b ./config.if ! 2802059785b ./config.sub ! 3629899249b ./config/ChangeLog 612455112b ./config/acinclude.m4 3007349820b ./config/mh-a68bsd 1442196770b ./config/mh-aix386 --- 167,178 ---- 3707632643b ./boehm-gc/version.h 2262051120b ./boehm-gc/weakpointer.h 4042937657b ./boehm-gc/win32_threads.c ! 1773423874b ./bugs.html 3139906847b ./config-ml.in 1152210207b ./config.guess 3430029098b ./config.if ! 572719696b ./config.sub ! 2984923331b ./config/ChangeLog 612455112b ./config/acinclude.m4 3007349820b ./config/mh-a68bsd 1442196770b ./config/mh-aix386 *************** *** 215,221 **** 456622165b ./config/mh-vaxult2 3265825290b ./config/mh-x86pic 198559626b ./config/mpw-mh-mpw ! 2820779821b ./config/mpw/ChangeLog 3145098931b ./config/mpw/MoveIfChange 1476422091b ./config/mpw/README 4005879853b ./config/mpw/forward-include --- 216,222 ---- 456622165b ./config/mh-vaxult2 3265825290b ./config/mh-x86pic 198559626b ./config/mpw-mh-mpw ! 1200430146b ./config/mpw/ChangeLog 3145098931b ./config/mpw/MoveIfChange 1476422091b ./config/mpw/README 4005879853b ./config/mpw/forward-include *************** *** 244,272 **** 2659154290b ./config/mt-wince 771382916b ./config/mt-x86pic 3518489976b ./configure ! 427264681b ./configure.in ! 2702811196b ./contrib/ChangeLog 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c 2025073358b ./contrib/download_f2c 2292355102b ./contrib/gcc_build ! 563298821b ./contrib/gcc_release ! 375356764b ./contrib/gcc_update 1336632236b ./contrib/gccbug.el 2520368790b ./contrib/gennews 4256039795b ./contrib/index-prop 3683285493b ./contrib/newcvsroot 3627076674b ./contrib/snapshot 1623905231b ./contrib/test_installed ! 2142292306b ./contrib/test_summary ! 3496524633b ./contrib/texi2pod.pl 2210983108b ./contrib/warn_summary ! 3159298671b ./faq.html 1005262133b ./fastjar/AUTHORS 1745615150b ./fastjar/CHANGES 1396100520b ./fastjar/COPYING ! 2121067631b ./fastjar/ChangeLog 2770615802b ./fastjar/INSTALL 2457567884b ./fastjar/Makefile.am 1854345631b ./fastjar/Makefile.in --- 245,273 ---- 2659154290b ./config/mt-wince 771382916b ./config/mt-x86pic 3518489976b ./configure ! 3733934766b ./configure.in ! 1104011341b ./contrib/ChangeLog 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c 2025073358b ./contrib/download_f2c 2292355102b ./contrib/gcc_build ! 2291211365b ./contrib/gcc_release ! 4179351048b ./contrib/gcc_update 1336632236b ./contrib/gccbug.el 2520368790b ./contrib/gennews 4256039795b ./contrib/index-prop 3683285493b ./contrib/newcvsroot 3627076674b ./contrib/snapshot 1623905231b ./contrib/test_installed ! 1719899924b ./contrib/test_summary ! 1623138628b ./contrib/texi2pod.pl 2210983108b ./contrib/warn_summary ! 2368292236b ./faq.html 1005262133b ./fastjar/AUTHORS 1745615150b ./fastjar/CHANGES 1396100520b ./fastjar/COPYING ! 953412608b ./fastjar/ChangeLog 2770615802b ./fastjar/INSTALL 2457567884b ./fastjar/Makefile.am 1854345631b ./fastjar/Makefile.in *************** *** 298,304 **** 1014730298b ./gcc/ABOUT-NLS 2171125041b ./gcc/COPYING 508743035b ./gcc/COPYING.LIB ! 3221493465b ./gcc/ChangeLog 1908191848b ./gcc/ChangeLog.0 1287222071b ./gcc/ChangeLog.1 3345586942b ./gcc/ChangeLog.2 --- 299,305 ---- 1014730298b ./gcc/ABOUT-NLS 2171125041b ./gcc/COPYING 508743035b ./gcc/COPYING.LIB ! 1725818549b ./gcc/ChangeLog 1908191848b ./gcc/ChangeLog.0 1287222071b ./gcc/ChangeLog.1 3345586942b ./gcc/ChangeLog.2 *************** *** 309,332 **** 232745070b ./gcc/FSFChangeLog.10 2525829644b ./gcc/FSFChangeLog.11 2771840517b ./gcc/LANGUAGES ! 894770421b ./gcc/Makefile.in ! 298033763b ./gcc/NEWS 408114840b ./gcc/ONEWS 3310775363b ./gcc/README-fixinc 2741038711b ./gcc/README.Portability 1084935625b ./gcc/SERVICE 1319767072b ./gcc/acconfig.h ! 3422433972b ./gcc/aclocal.m4 888005559b ./gcc/alias.c 1470543567b ./gcc/basic-block.h 1630019981b ./gcc/bb-reorder.c 446912740b ./gcc/bitmap.c 1224669072b ./gcc/bitmap.h 4170845746b ./gcc/build-make ! 1983993938b ./gcc/builtins.c 3745012357b ./gcc/builtins.def 293598240b ./gcc/c-aux-info.c ! 754964024b ./gcc/c-common.c 858317341b ./gcc/c-common.def 651535970b ./gcc/c-common.h 530343767b ./gcc/c-convert.c --- 310,333 ---- 232745070b ./gcc/FSFChangeLog.10 2525829644b ./gcc/FSFChangeLog.11 2771840517b ./gcc/LANGUAGES ! 356107076b ./gcc/Makefile.in ! 1041751184b ./gcc/NEWS 408114840b ./gcc/ONEWS 3310775363b ./gcc/README-fixinc 2741038711b ./gcc/README.Portability 1084935625b ./gcc/SERVICE 1319767072b ./gcc/acconfig.h ! 986758660b ./gcc/aclocal.m4 888005559b ./gcc/alias.c 1470543567b ./gcc/basic-block.h 1630019981b ./gcc/bb-reorder.c 446912740b ./gcc/bitmap.c 1224669072b ./gcc/bitmap.h 4170845746b ./gcc/build-make ! 1766646758b ./gcc/builtins.c 3745012357b ./gcc/builtins.def 293598240b ./gcc/c-aux-info.c ! 115949369b ./gcc/c-common.c 858317341b ./gcc/c-common.def 651535970b ./gcc/c-common.h 530343767b ./gcc/c-convert.c *************** *** 338,360 **** 3040046848b ./gcc/c-lang.c 61530428b ./gcc/c-lex.c 916578687b ./gcc/c-lex.h ! 1529796766b ./gcc/c-parse.c 353343561b ./gcc/c-parse.in 1042264003b ./gcc/c-parse.y 220833347b ./gcc/c-pragma.c ! 1223300745b ./gcc/c-pragma.h 4251225764b ./gcc/c-semantics.c 1365281254b ./gcc/c-tree.h 4101225614b ./gcc/c-typeck.c 3240633480b ./gcc/caller-save.c ! 2658612213b ./gcc/calls.c 1002247553b ./gcc/collect2.c 972672658b ./gcc/collect2.h ! 3946982746b ./gcc/combine.c 1434596660b ./gcc/conditions.h ! 927050222b ./gcc/config.gcc 1315260558b ./gcc/config.guess ! 540835186b ./gcc/config.in 3329436298b ./gcc/config/1750a/1750a-protos.h 550533333b ./gcc/config/1750a/1750a.c 1762431589b ./gcc/config/1750a/1750a.h --- 339,361 ---- 3040046848b ./gcc/c-lang.c 61530428b ./gcc/c-lex.c 916578687b ./gcc/c-lex.h ! 3840276923b ./gcc/c-parse.c 353343561b ./gcc/c-parse.in 1042264003b ./gcc/c-parse.y 220833347b ./gcc/c-pragma.c ! 2111457647b ./gcc/c-pragma.h 4251225764b ./gcc/c-semantics.c 1365281254b ./gcc/c-tree.h 4101225614b ./gcc/c-typeck.c 3240633480b ./gcc/caller-save.c ! 1728509875b ./gcc/calls.c 1002247553b ./gcc/collect2.c 972672658b ./gcc/collect2.h ! 1330846505b ./gcc/combine.c 1434596660b ./gcc/conditions.h ! 715709234b ./gcc/config.gcc 1315260558b ./gcc/config.guess ! 2721129262b ./gcc/config.in 3329436298b ./gcc/config/1750a/1750a-protos.h 550533333b ./gcc/config/1750a/1750a.c 1762431589b ./gcc/config/1750a/1750a.h *************** *** 378,384 **** 886575345b ./gcc/config/a29k/xm-unix.h 2162061640b ./gcc/config/alpha/alpha-interix.h 6534706b ./gcc/config/alpha/alpha-protos.h ! 2125824726b ./gcc/config/alpha/alpha.c 1455720533b ./gcc/config/alpha/alpha.h 3129153843b ./gcc/config/alpha/alpha.md 1998454692b ./gcc/config/alpha/alpha32.h --- 379,385 ---- 886575345b ./gcc/config/a29k/xm-unix.h 2162061640b ./gcc/config/alpha/alpha-interix.h 6534706b ./gcc/config/alpha/alpha-protos.h ! 290663601b ./gcc/config/alpha/alpha.c 1455720533b ./gcc/config/alpha/alpha.h 3129153843b ./gcc/config/alpha/alpha.md 1998454692b ./gcc/config/alpha/alpha32.h *************** *** 394,400 **** 3777698255b ./gcc/config/alpha/netbsd-elf.h 560446968b ./gcc/config/alpha/netbsd.h 156117508b ./gcc/config/alpha/openbsd.h ! 3927251038b ./gcc/config/alpha/osf.h 1792826440b ./gcc/config/alpha/osf12.h 3744703656b ./gcc/config/alpha/osf2or3.h 2776242025b ./gcc/config/alpha/osf5.h --- 395,401 ---- 3777698255b ./gcc/config/alpha/netbsd-elf.h 560446968b ./gcc/config/alpha/netbsd.h 156117508b ./gcc/config/alpha/openbsd.h ! 915689720b ./gcc/config/alpha/osf.h 1792826440b ./gcc/config/alpha/osf12.h 3744703656b ./gcc/config/alpha/osf2or3.h 2776242025b ./gcc/config/alpha/osf5.h *************** *** 447,453 **** 2879384629b ./gcc/config/arm/riscix.h 3894425269b ./gcc/config/arm/riscix1-1.h 1910088041b ./gcc/config/arm/rix-gas.h ! 1726038923b ./gcc/config/arm/rtems-elf.h 1345878867b ./gcc/config/arm/semi.h 2333245964b ./gcc/config/arm/semiaof.h 3824844131b ./gcc/config/arm/strongarm-coff.h --- 448,454 ---- 2879384629b ./gcc/config/arm/riscix.h 3894425269b ./gcc/config/arm/riscix1-1.h 1910088041b ./gcc/config/arm/rix-gas.h ! 2909625271b ./gcc/config/arm/rtems-elf.h 1345878867b ./gcc/config/arm/semi.h 2333245964b ./gcc/config/arm/semiaof.h 3824844131b ./gcc/config/arm/strongarm-coff.h *************** *** 477,485 **** 1516433770b ./gcc/config/arm/xscale-coff.h 850423094b ./gcc/config/arm/xscale-elf.h 797696786b ./gcc/config/avr/avr-protos.h ! 673818817b ./gcc/config/avr/avr.c 2236743183b ./gcc/config/avr/avr.h ! 2230217975b ./gcc/config/avr/avr.md 1853285406b ./gcc/config/avr/libgcc.S 2584285546b ./gcc/config/avr/t-avr 2422120746b ./gcc/config/avr/xm-avr.h --- 478,486 ---- 1516433770b ./gcc/config/arm/xscale-coff.h 850423094b ./gcc/config/arm/xscale-elf.h 797696786b ./gcc/config/avr/avr-protos.h ! 474705185b ./gcc/config/avr/avr.c 2236743183b ./gcc/config/avr/avr.h ! 4228853051b ./gcc/config/avr/avr.md 1853285406b ./gcc/config/avr/libgcc.S 2584285546b ./gcc/config/avr/t-avr 2422120746b ./gcc/config/avr/xm-avr.h *************** *** 558,569 **** 3236013445b ./gcc/config/gnu.h 1556064359b ./gcc/config/gofast.h 1075730847b ./gcc/config/h8300/h8300-protos.h ! 2078365164b ./gcc/config/h8300/h8300.c 611827174b ./gcc/config/h8300/h8300.h 3834479452b ./gcc/config/h8300/h8300.md 2745378669b ./gcc/config/h8300/lib1funcs.asm 836948877b ./gcc/config/h8300/rtems.h ! 1911093065b ./gcc/config/h8300/t-h8300 2653746305b ./gcc/config/h8300/xm-h8300.h 2187046003b ./gcc/config/i370/README 2148254440b ./gcc/config/i370/i370-protos.h --- 559,570 ---- 3236013445b ./gcc/config/gnu.h 1556064359b ./gcc/config/gofast.h 1075730847b ./gcc/config/h8300/h8300-protos.h ! 2022601699b ./gcc/config/h8300/h8300.c 611827174b ./gcc/config/h8300/h8300.h 3834479452b ./gcc/config/h8300/h8300.md 2745378669b ./gcc/config/h8300/lib1funcs.asm 836948877b ./gcc/config/h8300/rtems.h ! 665527148b ./gcc/config/h8300/t-h8300 2653746305b ./gcc/config/h8300/xm-h8300.h 2187046003b ./gcc/config/i370/README 2148254440b ./gcc/config/i370/i370-protos.h *************** *** 599,605 **** 3055146333b ./gcc/config/i386/dgux.h 1570943831b ./gcc/config/i386/djgpp-rtems.h 1380903219b ./gcc/config/i386/djgpp.h ! 1048297186b ./gcc/config/i386/freebsd-aout.h 3878874905b ./gcc/config/i386/freebsd.h 1632002228b ./gcc/config/i386/gas.h 4266288971b ./gcc/config/i386/gmon-sol2.c --- 600,606 ---- 3055146333b ./gcc/config/i386/dgux.h 1570943831b ./gcc/config/i386/djgpp-rtems.h 1380903219b ./gcc/config/i386/djgpp.h ! 301916446b ./gcc/config/i386/freebsd-aout.h 3878874905b ./gcc/config/i386/freebsd.h 1632002228b ./gcc/config/i386/gas.h 4266288971b ./gcc/config/i386/gmon-sol2.c *************** *** 609,617 **** 3714536309b ./gcc/config/i386/i386-coff.h 1565496826b ./gcc/config/i386/i386-interix.h 1433006975b ./gcc/config/i386/i386-protos.h ! 2372699620b ./gcc/config/i386/i386.c ! 4031522535b ./gcc/config/i386/i386.h ! 2643777702b ./gcc/config/i386/i386.md 2138609268b ./gcc/config/i386/i386elf.h 2044371014b ./gcc/config/i386/interix.c 3245573839b ./gcc/config/i386/isc.h --- 610,618 ---- 3714536309b ./gcc/config/i386/i386-coff.h 1565496826b ./gcc/config/i386/i386-interix.h 1433006975b ./gcc/config/i386/i386-protos.h ! 1144347387b ./gcc/config/i386/i386.c ! 663612626b ./gcc/config/i386/i386.h ! 3655216872b ./gcc/config/i386/i386.md 2138609268b ./gcc/config/i386/i386elf.h 2044371014b ./gcc/config/i386/interix.c 3245573839b ./gcc/config/i386/isc.h *************** *** 628,634 **** 2913497186b ./gcc/config/i386/netbsd.h 4211562640b ./gcc/config/i386/netware.h 1904082784b ./gcc/config/i386/next.h ! 393495069b ./gcc/config/i386/openbsd.h 407886013b ./gcc/config/i386/os2.h 2999570618b ./gcc/config/i386/osf1-ci.asm 2303041887b ./gcc/config/i386/osf1-cn.asm --- 629,635 ---- 2913497186b ./gcc/config/i386/netbsd.h 4211562640b ./gcc/config/i386/netware.h 1904082784b ./gcc/config/i386/next.h ! 2316910802b ./gcc/config/i386/openbsd.h 407886013b ./gcc/config/i386/os2.h 2999570618b ./gcc/config/i386/osf1-ci.asm 2303041887b ./gcc/config/i386/osf1-cn.asm *************** *** 643,649 **** 1655058580b ./gcc/config/i386/sco.h 3672544994b ./gcc/config/i386/sco4.h 1608140239b ./gcc/config/i386/sco4dbx.h ! 2496686951b ./gcc/config/i386/sco5.h 544707575b ./gcc/config/i386/scodbx.h 2260828739b ./gcc/config/i386/seq-gas.h 2485377693b ./gcc/config/i386/seq-sysv3.h --- 644,650 ---- 1655058580b ./gcc/config/i386/sco.h 3672544994b ./gcc/config/i386/sco4.h 1608140239b ./gcc/config/i386/sco4dbx.h ! 4073321814b ./gcc/config/i386/sco5.h 544707575b ./gcc/config/i386/scodbx.h 2260828739b ./gcc/config/i386/seq-gas.h 2485377693b ./gcc/config/i386/seq-sysv3.h *************** *** 653,659 **** 1565106149b ./gcc/config/i386/sol2-ci.asm 4008317666b ./gcc/config/i386/sol2-cn.asm 2045686122b ./gcc/config/i386/sol2-gc1.asm ! 2849896107b ./gcc/config/i386/sol2.h 3870175252b ./gcc/config/i386/sol2gas.h 4009223163b ./gcc/config/i386/sun.h 1745602951b ./gcc/config/i386/sun386.h --- 654,660 ---- 1565106149b ./gcc/config/i386/sol2-ci.asm 4008317666b ./gcc/config/i386/sol2-cn.asm 2045686122b ./gcc/config/i386/sol2-gc1.asm ! 3461939003b ./gcc/config/i386/sol2.h 3870175252b ./gcc/config/i386/sol2gas.h 4009223163b ./gcc/config/i386/sun.h 1745602951b ./gcc/config/i386/sun386.h *************** *** 667,673 **** 2307182909b ./gcc/config/i386/t-beos 2437302600b ./gcc/config/i386/t-crtpic 2246944266b ./gcc/config/i386/t-crtstuff ! 3759654293b ./gcc/config/i386/t-cygwin 2849008235b ./gcc/config/i386/t-dgux 482628910b ./gcc/config/i386/t-djgpp 2949021345b ./gcc/config/i386/t-i386bare --- 668,674 ---- 2307182909b ./gcc/config/i386/t-beos 2437302600b ./gcc/config/i386/t-crtpic 2246944266b ./gcc/config/i386/t-crtstuff ! 1293787568b ./gcc/config/i386/t-cygwin 2849008235b ./gcc/config/i386/t-dgux 482628910b ./gcc/config/i386/t-djgpp 2949021345b ./gcc/config/i386/t-i386bare *************** *** 676,681 **** --- 677,683 ---- 4056914306b ./gcc/config/i386/t-mingw32 1294101962b ./gcc/config/i386/t-netware 3437455964b ./gcc/config/i386/t-next + 709063989b ./gcc/config/i386/t-openbsd 1186749595b ./gcc/config/i386/t-osf 1520459705b ./gcc/config/i386/t-osf1elf 2945147937b ./gcc/config/i386/t-rtems-i386 *************** *** 761,767 **** 257666960b ./gcc/config/i960/i960-coff.h 969698165b ./gcc/config/i960/i960-protos.h 3134927219b ./gcc/config/i960/i960.c ! 3415890728b ./gcc/config/i960/i960.h 302073607b ./gcc/config/i960/i960.md 2042390923b ./gcc/config/i960/rtems.h 649423259b ./gcc/config/i960/t-960bare --- 763,769 ---- 257666960b ./gcc/config/i960/i960-coff.h 969698165b ./gcc/config/i960/i960-protos.h 3134927219b ./gcc/config/i960/i960.c ! 2679588497b ./gcc/config/i960/i960.h 302073607b ./gcc/config/i960/i960.md 2042390923b ./gcc/config/i960/rtems.h 649423259b ./gcc/config/i960/t-960bare *************** *** 769,783 **** 3983766548b ./gcc/config/i960/vx960-coff.h 1895495318b ./gcc/config/i960/vx960.h 651274697b ./gcc/config/i960/xm-i960.h ! 1985080334b ./gcc/config/ia64/crtbegin.asm 1855415332b ./gcc/config/ia64/crtend.asm 3900706760b ./gcc/config/ia64/elf.h ! 2360999728b ./gcc/config/ia64/fde-glibc.c 3987815221b ./gcc/config/ia64/hpux.h 353921496b ./gcc/config/ia64/ia64-protos.h 1227923781b ./gcc/config/ia64/ia64.c ! 1804742155b ./gcc/config/ia64/ia64.h ! 1868028218b ./gcc/config/ia64/ia64.md 3051569292b ./gcc/config/ia64/ia64intrin.h 3488320870b ./gcc/config/ia64/lib1funcs.asm 2361471520b ./gcc/config/ia64/libgcc-ia64.ver --- 771,785 ---- 3983766548b ./gcc/config/i960/vx960-coff.h 1895495318b ./gcc/config/i960/vx960.h 651274697b ./gcc/config/i960/xm-i960.h ! 876649532b ./gcc/config/ia64/crtbegin.asm 1855415332b ./gcc/config/ia64/crtend.asm 3900706760b ./gcc/config/ia64/elf.h ! 2257162614b ./gcc/config/ia64/fde-glibc.c 3987815221b ./gcc/config/ia64/hpux.h 353921496b ./gcc/config/ia64/ia64-protos.h 1227923781b ./gcc/config/ia64/ia64.c ! 2598224474b ./gcc/config/ia64/ia64.h ! 102032371b ./gcc/config/ia64/ia64.md 3051569292b ./gcc/config/ia64/ia64intrin.h 3488320870b ./gcc/config/ia64/lib1funcs.asm 2361471520b ./gcc/config/ia64/libgcc-ia64.ver *************** *** 803,816 **** 304509363b ./gcc/config/m32r/m32r.md 699324061b ./gcc/config/m32r/t-m32r 505110414b ./gcc/config/m32r/xm-m32r.h ! 2223444330b ./gcc/config/m68hc11/larith.asm 3563849705b ./gcc/config/m68hc11/m68hc11-crt0.S 321124732b ./gcc/config/m68hc11/m68hc11-protos.h ! 2375330730b ./gcc/config/m68hc11/m68hc11.c ! 1980290975b ./gcc/config/m68hc11/m68hc11.h ! 898420326b ./gcc/config/m68hc11/m68hc11.md 3915866468b ./gcc/config/m68hc11/m68hc12.h ! 1125478939b ./gcc/config/m68hc11/t-m68hc11-gas 1569281943b ./gcc/config/m68hc11/xm-m68hc11.h 9689423b ./gcc/config/m68k/3b1.h 620759368b ./gcc/config/m68k/3b1g.h --- 805,818 ---- 304509363b ./gcc/config/m32r/m32r.md 699324061b ./gcc/config/m32r/t-m32r 505110414b ./gcc/config/m32r/xm-m32r.h ! 2629267148b ./gcc/config/m68hc11/larith.asm 3563849705b ./gcc/config/m68hc11/m68hc11-crt0.S 321124732b ./gcc/config/m68hc11/m68hc11-protos.h ! 4119290448b ./gcc/config/m68hc11/m68hc11.c ! 1307274545b ./gcc/config/m68hc11/m68hc11.h ! 535592980b ./gcc/config/m68hc11/m68hc11.md 3915866468b ./gcc/config/m68hc11/m68hc12.h ! 3238866738b ./gcc/config/m68hc11/t-m68hc11-gas 1569281943b ./gcc/config/m68hc11/xm-m68hc11.h 9689423b ./gcc/config/m68k/3b1.h 620759368b ./gcc/config/m68k/3b1g.h *************** *** 851,858 **** 3484500543b ./gcc/config/m68k/isi-nfp.h 3924901323b ./gcc/config/m68k/isi.h 2393398106b ./gcc/config/m68k/lb1sf68.asm ! 824150851b ./gcc/config/m68k/linux-aout.h ! 2514413827b ./gcc/config/m68k/linux.h 162996909b ./gcc/config/m68k/lynx-ng.h 3139650275b ./gcc/config/m68k/lynx.h 810585616b ./gcc/config/m68k/m68020-elf.h --- 853,860 ---- 3484500543b ./gcc/config/m68k/isi-nfp.h 3924901323b ./gcc/config/m68k/isi.h 2393398106b ./gcc/config/m68k/lb1sf68.asm ! 1977334448b ./gcc/config/m68k/linux-aout.h ! 3697403275b ./gcc/config/m68k/linux.h 162996909b ./gcc/config/m68k/lynx-ng.h 3139650275b ./gcc/config/m68k/lynx.h 810585616b ./gcc/config/m68k/m68020-elf.h *************** *** 861,869 **** 3855098247b ./gcc/config/m68k/m68k-none.h 3399395319b ./gcc/config/m68k/m68k-protos.h 2991007317b ./gcc/config/m68k/m68k-psos.h ! 521675563b ./gcc/config/m68k/m68k.c ! 2431560587b ./gcc/config/m68k/m68k.h ! 4259131422b ./gcc/config/m68k/m68k.md 342213590b ./gcc/config/m68k/m68kelf.h 3506718024b ./gcc/config/m68k/m68kemb.h 4069130220b ./gcc/config/m68k/m68kv4.h --- 863,871 ---- 3855098247b ./gcc/config/m68k/m68k-none.h 3399395319b ./gcc/config/m68k/m68k-protos.h 2991007317b ./gcc/config/m68k/m68k-psos.h ! 2929757075b ./gcc/config/m68k/m68k.c ! 1778306871b ./gcc/config/m68k/m68k.h ! 2207471422b ./gcc/config/m68k/m68k.md 342213590b ./gcc/config/m68k/m68kelf.h 3506718024b ./gcc/config/m68k/m68kemb.h 4069130220b ./gcc/config/m68k/m68kv4.h *************** *** 902,907 **** --- 904,910 ---- 2414955585b ./gcc/config/m68k/t-mot3300-gas 2294965883b ./gcc/config/m68k/t-mot3300-gld 249897538b ./gcc/config/m68k/t-next + 3937644742b ./gcc/config/m68k/t-openbsd 2967405432b ./gcc/config/m68k/t-vxworks68 3067739314b ./gcc/config/m68k/tower-as.h 1341630096b ./gcc/config/m68k/tower.h *************** *** 1004,1014 **** 4009674128b ./gcc/config/mips/iris3.h 3161243087b ./gcc/config/mips/iris4.h 2743944992b ./gcc/config/mips/iris4loser.h ! 3783096945b ./gcc/config/mips/iris5.h 3875094584b ./gcc/config/mips/iris5gas.h ! 762975181b ./gcc/config/mips/iris6.h 2607381948b ./gcc/config/mips/iris6gld.h ! 60156664b ./gcc/config/mips/linux.h 1257153673b ./gcc/config/mips/mips-5.h 3874587589b ./gcc/config/mips/mips-protos.h 3305871759b ./gcc/config/mips/mips.c --- 1007,1018 ---- 4009674128b ./gcc/config/mips/iris3.h 3161243087b ./gcc/config/mips/iris4.h 2743944992b ./gcc/config/mips/iris4loser.h ! 1274309488b ./gcc/config/mips/iris5.h 3875094584b ./gcc/config/mips/iris5gas.h ! 1945245383b ./gcc/config/mips/iris6.h 2607381948b ./gcc/config/mips/iris6gld.h ! 4258956066b ./gcc/config/mips/irix6-libc-compat.c ! 943017591b ./gcc/config/mips/linux.h 1257153673b ./gcc/config/mips/mips-5.h 3874587589b ./gcc/config/mips/mips-protos.h 3305871759b ./gcc/config/mips/mips.c *************** *** 1037,1043 **** 3490072647b ./gcc/config/mips/t-cross64 3126392274b ./gcc/config/mips/t-ecoff 3254374069b ./gcc/config/mips/t-elf ! 3961218184b ./gcc/config/mips/t-iris6 491943219b ./gcc/config/mips/t-mips 491943219b ./gcc/config/mips/t-mips-gas 491943219b ./gcc/config/mips/t-osfrose --- 1041,1047 ---- 3490072647b ./gcc/config/mips/t-cross64 3126392274b ./gcc/config/mips/t-ecoff 3254374069b ./gcc/config/mips/t-elf ! 991348745b ./gcc/config/mips/t-iris6 491943219b ./gcc/config/mips/t-mips 491943219b ./gcc/config/mips/t-mips-gas 491943219b ./gcc/config/mips/t-osfrose *************** *** 1074,1080 **** 1832400411b ./gcc/config/mn10200/mn10200.c 504726353b ./gcc/config/mn10200/mn10200.h 2020602808b ./gcc/config/mn10200/mn10200.md ! 420635432b ./gcc/config/mn10200/t-mn10200 4023523482b ./gcc/config/mn10200/xm-mn10200.h 2666234742b ./gcc/config/mn10300/mn10300-protos.h 430494059b ./gcc/config/mn10300/mn10300.c --- 1078,1084 ---- 1832400411b ./gcc/config/mn10200/mn10200.c 504726353b ./gcc/config/mn10200/mn10200.h 2020602808b ./gcc/config/mn10200/mn10200.md ! 4135411984b ./gcc/config/mn10200/t-mn10200 4023523482b ./gcc/config/mn10200/xm-mn10200.h 2666234742b ./gcc/config/mn10300/mn10300-protos.h 430494059b ./gcc/config/mn10300/mn10300.c *************** *** 1104,1110 **** 1809546469b ./gcc/config/ns32k/xm-netbsd.h 4010302330b ./gcc/config/ns32k/xm-ns32k.h 876936455b ./gcc/config/ns32k/xm-pc532-min.h ! 1005756043b ./gcc/config/openbsd.h 3202962647b ./gcc/config/pa/elf.h 1435423353b ./gcc/config/pa/lib1funcs.asm 1377366310b ./gcc/config/pa/lib2funcs.asm --- 1108,1114 ---- 1809546469b ./gcc/config/ns32k/xm-netbsd.h 4010302330b ./gcc/config/ns32k/xm-ns32k.h 876936455b ./gcc/config/ns32k/xm-pc532-min.h ! 92576225b ./gcc/config/openbsd.h 3202962647b ./gcc/config/pa/elf.h 1435423353b ./gcc/config/pa/lib1funcs.asm 1377366310b ./gcc/config/pa/lib2funcs.asm *************** *** 1187,1197 **** 3919710780b ./gcc/config/rs6000/lynx.h 1717863199b ./gcc/config/rs6000/mach.h 1820610909b ./gcc/config/rs6000/milli.exp ! 2280752475b ./gcc/config/rs6000/rs6000-protos.h ! 2313393542b ./gcc/config/rs6000/rs6000.c ! 4212486153b ./gcc/config/rs6000/rs6000.h ! 2662842953b ./gcc/config/rs6000/rs6000.md ! 2279396753b ./gcc/config/rs6000/rtems.h 4210977084b ./gcc/config/rs6000/sol-c0.c 1695016479b ./gcc/config/rs6000/sol-ci.asm 1927994766b ./gcc/config/rs6000/sol-cn.asm --- 1191,1201 ---- 3919710780b ./gcc/config/rs6000/lynx.h 1717863199b ./gcc/config/rs6000/mach.h 1820610909b ./gcc/config/rs6000/milli.exp ! 2609288545b ./gcc/config/rs6000/rs6000-protos.h ! 4126292778b ./gcc/config/rs6000/rs6000.c ! 1505319789b ./gcc/config/rs6000/rs6000.h ! 41571647b ./gcc/config/rs6000/rs6000.md ! 2636863004b ./gcc/config/rs6000/rtems.h 4210977084b ./gcc/config/rs6000/sol-c0.c 1695016479b ./gcc/config/rs6000/sol-ci.asm 1927994766b ./gcc/config/rs6000/sol-cn.asm *************** *** 1226,1231 **** --- 1230,1245 ---- 3676444310b ./gcc/config/rs6000/xm-rs6000.h 1451552425b ./gcc/config/rs6000/xm-sysv4.h 3895058198b ./gcc/config/rtems.h + 3390348482b ./gcc/config/s390/fixdfdi.h + 3456013752b ./gcc/config/s390/linux.h + 854043548b ./gcc/config/s390/linux64.h + 640221274b ./gcc/config/s390/s390-protos.h + 4149280158b ./gcc/config/s390/s390.c + 1921139648b ./gcc/config/s390/s390.h + 2541395328b ./gcc/config/s390/s390.md + 2251075592b ./gcc/config/s390/t-linux + 843019701b ./gcc/config/s390/xm-s390.h + 1662767015b ./gcc/config/s390/xm-s390x.h 3830594407b ./gcc/config/sh/crt1.asm 3104307092b ./gcc/config/sh/crti.asm 4096536650b ./gcc/config/sh/crtn.asm *************** *** 1235,1243 **** 2599163754b ./gcc/config/sh/rtems.h 990865180b ./gcc/config/sh/rtemself.h 2070405666b ./gcc/config/sh/sh-protos.h ! 902076945b ./gcc/config/sh/sh.c ! 3917221987b ./gcc/config/sh/sh.h ! 909150621b ./gcc/config/sh/sh.md 3555569248b ./gcc/config/sh/t-elf 1641673146b ./gcc/config/sh/t-linux 2851505400b ./gcc/config/sh/t-sh --- 1249,1257 ---- 2599163754b ./gcc/config/sh/rtems.h 990865180b ./gcc/config/sh/rtemself.h 2070405666b ./gcc/config/sh/sh-protos.h ! 2938981636b ./gcc/config/sh/sh.c ! 2550458827b ./gcc/config/sh/sh.h ! 3029807708b ./gcc/config/sh/sh.md 3555569248b ./gcc/config/sh/t-elf 1641673146b ./gcc/config/sh/t-linux 2851505400b ./gcc/config/sh/t-sh *************** *** 1259,1268 **** 3970301731b ./gcc/config/sparc/lynx-ng.h 4076055548b ./gcc/config/sparc/lynx.h 4227191410b ./gcc/config/sparc/netbsd.h ! 1127615452b ./gcc/config/sparc/openbsd.h 2511482476b ./gcc/config/sparc/pbd.h ! 3420292572b ./gcc/config/sparc/rtems.h ! 1929865834b ./gcc/config/sparc/rtemself.h 2777436121b ./gcc/config/sparc/sol2-64.h 1463670426b ./gcc/config/sparc/sol2-c1.asm 3288323690b ./gcc/config/sparc/sol2-ci.asm --- 1273,1282 ---- 3970301731b ./gcc/config/sparc/lynx-ng.h 4076055548b ./gcc/config/sparc/lynx.h 4227191410b ./gcc/config/sparc/netbsd.h ! 3588896900b ./gcc/config/sparc/openbsd.h 2511482476b ./gcc/config/sparc/pbd.h ! 3626711995b ./gcc/config/sparc/rtems.h ! 3335893347b ./gcc/config/sparc/rtemself.h 2777436121b ./gcc/config/sparc/sol2-64.h 1463670426b ./gcc/config/sparc/sol2-c1.asm 3288323690b ./gcc/config/sparc/sol2-ci.asm *************** *** 1277,1284 **** 1145591187b ./gcc/config/sparc/sp86x-elf.h 3513225184b ./gcc/config/sparc/sparc-protos.h 2857592585b ./gcc/config/sparc/sparc.c ! 2689760442b ./gcc/config/sparc/sparc.h ! 3462597036b ./gcc/config/sparc/sparc.md 113090716b ./gcc/config/sparc/splet.h 3035335612b ./gcc/config/sparc/sun4gas.h 3455486806b ./gcc/config/sparc/sun4o3.h --- 1291,1298 ---- 1145591187b ./gcc/config/sparc/sp86x-elf.h 3513225184b ./gcc/config/sparc/sparc-protos.h 2857592585b ./gcc/config/sparc/sparc.c ! 3958437963b ./gcc/config/sparc/sparc.h ! 2064414952b ./gcc/config/sparc/sparc.md 113090716b ./gcc/config/sparc/splet.h 3035335612b ./gcc/config/sparc/sun4gas.h 3455486806b ./gcc/config/sparc/sun4o3.h *************** *** 1288,1293 **** --- 1302,1308 ---- 2616142394b ./gcc/config/sparc/t-elf 1582758741b ./gcc/config/sparc/t-halos 3089985973b ./gcc/config/sparc/t-linux64 + 1190032917b ./gcc/config/sparc/t-openbsd 1215655583b ./gcc/config/sparc/t-sol2 3160382849b ./gcc/config/sparc/t-sol2-64 1887691100b ./gcc/config/sparc/t-sp64 *************** *** 1319,1324 **** --- 1334,1340 ---- 2512129728b ./gcc/config/t-gnu 3050012299b ./gcc/config/t-install-cpp 64239056b ./gcc/config/t-libc-ok + 2753685882b ./gcc/config/t-libgcc-pic 3735725807b ./gcc/config/t-linux 4067850389b ./gcc/config/t-linux-aout 4111896717b ./gcc/config/t-linux-gnulibc1 *************** *** 1338,1344 **** 3289228637b ./gcc/config/v850/t-v850 2277307708b ./gcc/config/v850/v850-c.c 4194174891b ./gcc/config/v850/v850-protos.h ! 2923238779b ./gcc/config/v850/v850.c 2015084960b ./gcc/config/v850/v850.h 2952263546b ./gcc/config/v850/v850.md 1862842141b ./gcc/config/v850/xm-v850.h --- 1354,1360 ---- 3289228637b ./gcc/config/v850/t-v850 2277307708b ./gcc/config/v850/v850-c.c 4194174891b ./gcc/config/v850/v850-protos.h ! 3586695901b ./gcc/config/v850/v850.c 2015084960b ./gcc/config/v850/v850.h 2952263546b ./gcc/config/v850/v850.md 1862842141b ./gcc/config/v850/xm-v850.h *************** *** 1378,1438 **** 3697539901b ./gcc/config/xm-std32.h 4091214272b ./gcc/config/xm-svr3.h 3741840130b ./gcc/config/xm-svr4.h ! 1567946887b ./gcc/configure 3600082583b ./gcc/configure.frag ! 1359594426b ./gcc/configure.in 3394568616b ./gcc/conflict.c 556313302b ./gcc/convert.c 4032982380b ./gcc/convert.h 1230086821b ./gcc/cp/.cvsignore ! 2767021203b ./gcc/cp/ChangeLog 1903584b ./gcc/cp/ChangeLog.1 1881731020b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs ! 2803706434b ./gcc/cp/Make-lang.in ! 4181713997b ./gcc/cp/NEWS ! 1030044044b ./gcc/cp/call.c 4115552602b ./gcc/cp/cfns.gperf 1705070232b ./gcc/cp/cfns.h ! 2719775278b ./gcc/cp/class.c 1920345452b ./gcc/cp/config-lang.in 3406340479b ./gcc/cp/cp-tree.def ! 4046209358b ./gcc/cp/cp-tree.h ! 2644297654b ./gcc/cp/cvt.c ! 3096903153b ./gcc/cp/decl.c 1027981985b ./gcc/cp/decl.h ! 3553404977b ./gcc/cp/decl2.c 217522872b ./gcc/cp/dump.c 3091430199b ./gcc/cp/errfn.c 3740657327b ./gcc/cp/error.c ! 121040647b ./gcc/cp/except.c ! 118974200b ./gcc/cp/expr.c 1673698151b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 958770625b ./gcc/cp/g++spec.c 909786423b ./gcc/cp/init.c ! 1259668850b ./gcc/cp/lang-options.h 1106559236b ./gcc/cp/lang-specs.h 3458231555b ./gcc/cp/lex.c 1080237442b ./gcc/cp/lex.h 2689785615b ./gcc/cp/mangle.c ! 964206497b ./gcc/cp/method.c 701335209b ./gcc/cp/mpw-config.in 4041177245b ./gcc/cp/mpw-make.sed 1791576125b ./gcc/cp/operators.def 3678445539b ./gcc/cp/optimize.c ! 348619331b ./gcc/cp/parse.c 4085964132b ./gcc/cp/parse.h 1879411084b ./gcc/cp/parse.y ! 3205334520b ./gcc/cp/pt.c 903594734b ./gcc/cp/ptree.c 1890655336b ./gcc/cp/repo.c 3470529425b ./gcc/cp/rtti.c 696207784b ./gcc/cp/search.c ! 2514806824b ./gcc/cp/semantics.c ! 3057733644b ./gcc/cp/spew.c 91515646b ./gcc/cp/tree.c ! 4110885463b ./gcc/cp/typeck.c 3459487995b ./gcc/cp/typeck2.c 1359529404b ./gcc/cp/xref.c 4198030259b ./gcc/cppdefault.c --- 1394,1454 ---- 3697539901b ./gcc/config/xm-std32.h 4091214272b ./gcc/config/xm-svr3.h 3741840130b ./gcc/config/xm-svr4.h ! 3218574372b ./gcc/configure 3600082583b ./gcc/configure.frag ! 2309352480b ./gcc/configure.in 3394568616b ./gcc/conflict.c 556313302b ./gcc/convert.c 4032982380b ./gcc/convert.h 1230086821b ./gcc/cp/.cvsignore ! 1456544739b ./gcc/cp/ChangeLog 1903584b ./gcc/cp/ChangeLog.1 1881731020b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs ! 615847120b ./gcc/cp/Make-lang.in ! 846059250b ./gcc/cp/NEWS ! 1310742131b ./gcc/cp/call.c 4115552602b ./gcc/cp/cfns.gperf 1705070232b ./gcc/cp/cfns.h ! 3936615852b ./gcc/cp/class.c 1920345452b ./gcc/cp/config-lang.in 3406340479b ./gcc/cp/cp-tree.def ! 2682469958b ./gcc/cp/cp-tree.h ! 788167684b ./gcc/cp/cvt.c ! 1404777217b ./gcc/cp/decl.c 1027981985b ./gcc/cp/decl.h ! 2529358069b ./gcc/cp/decl2.c 217522872b ./gcc/cp/dump.c 3091430199b ./gcc/cp/errfn.c 3740657327b ./gcc/cp/error.c ! 374515501b ./gcc/cp/except.c ! 764912804b ./gcc/cp/expr.c 1673698151b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 958770625b ./gcc/cp/g++spec.c 909786423b ./gcc/cp/init.c ! 2002469304b ./gcc/cp/lang-options.h 1106559236b ./gcc/cp/lang-specs.h 3458231555b ./gcc/cp/lex.c 1080237442b ./gcc/cp/lex.h 2689785615b ./gcc/cp/mangle.c ! 419660916b ./gcc/cp/method.c 701335209b ./gcc/cp/mpw-config.in 4041177245b ./gcc/cp/mpw-make.sed 1791576125b ./gcc/cp/operators.def 3678445539b ./gcc/cp/optimize.c ! 3051645323b ./gcc/cp/parse.c 4085964132b ./gcc/cp/parse.h 1879411084b ./gcc/cp/parse.y ! 2874107554b ./gcc/cp/pt.c 903594734b ./gcc/cp/ptree.c 1890655336b ./gcc/cp/repo.c 3470529425b ./gcc/cp/rtti.c 696207784b ./gcc/cp/search.c ! 2381646409b ./gcc/cp/semantics.c ! 1818467654b ./gcc/cp/spew.c 91515646b ./gcc/cp/tree.c ! 3390967551b ./gcc/cp/typeck.c 3459487995b ./gcc/cp/typeck2.c 1359529404b ./gcc/cp/xref.c 4198030259b ./gcc/cppdefault.c *************** *** 1443,1533 **** 3904470681b ./gcc/cpphash.c 1641754935b ./gcc/cpphash.h 2491140484b ./gcc/cppinit.c ! 1667158191b ./gcc/cpplex.c ! 1824333310b ./gcc/cpplib.c 3400544410b ./gcc/cpplib.h ! 3109648406b ./gcc/cppmacro.c 373762755b ./gcc/cppmain.c 4137262150b ./gcc/cppspec.c 2903740050b ./gcc/cross-make 1363172067b ./gcc/crtstuff.c ! 3883450779b ./gcc/cse.c 1864237584b ./gcc/cselib.h 216805921b ./gcc/cstamp-h.in 3098946745b ./gcc/dbxout.c 181061183b ./gcc/dbxout.h 1104788844b ./gcc/dbxstclass.h 2469057166b ./gcc/dce.c ! 1481772946b ./gcc/defaults.h 2226328701b ./gcc/dependence.c 4065269356b ./gcc/diagnostic.c 2207352912b ./gcc/diagnostic.h 890851034b ./gcc/doc/.cvsignore ! 183426350b ./gcc/doc/c-tree.texi ! 2804956321b ./gcc/doc/contrib.texi ! 409271999b ./gcc/doc/cpp.1 ! 889129844b ./gcc/doc/cpp.info ! 2332008724b ./gcc/doc/cpp.info-1 ! 3665132692b ./gcc/doc/cpp.info-2 ! 711343276b ./gcc/doc/cpp.info-3 ! 3239676280b ./gcc/doc/cpp.info-4 ! 2888038442b ./gcc/doc/cpp.texi ! 2023568123b ./gcc/doc/cppinternals.info ! 989690387b ./gcc/doc/cppinternals.texi ! 1313341922b ./gcc/doc/extend.texi ! 1008218839b ./gcc/doc/fdl.texi ! 943066314b ./gcc/doc/gcc.1 ! 1911134043b ./gcc/doc/gcc.info ! 518676450b ./gcc/doc/gcc.info-1 ! 839104615b ./gcc/doc/gcc.info-10 ! 870877309b ./gcc/doc/gcc.info-11 ! 3990880836b ./gcc/doc/gcc.info-12 ! 2355349101b ./gcc/doc/gcc.info-13 ! 347037538b ./gcc/doc/gcc.info-14 ! 3315905567b ./gcc/doc/gcc.info-15 ! 1406109907b ./gcc/doc/gcc.info-16 ! 954351188b ./gcc/doc/gcc.info-17 ! 3188018276b ./gcc/doc/gcc.info-18 ! 859080395b ./gcc/doc/gcc.info-19 ! 1729295920b ./gcc/doc/gcc.info-2 ! 3671295723b ./gcc/doc/gcc.info-20 ! 3045419293b ./gcc/doc/gcc.info-21 ! 4130794352b ./gcc/doc/gcc.info-22 ! 4147631695b ./gcc/doc/gcc.info-23 ! 3297190284b ./gcc/doc/gcc.info-24 ! 1366639731b ./gcc/doc/gcc.info-25 735287455b ./gcc/doc/gcc.info-26 ! 1987648734b ./gcc/doc/gcc.info-27 ! 3159668948b ./gcc/doc/gcc.info-28 ! 646547974b ./gcc/doc/gcc.info-29 ! 4126399120b ./gcc/doc/gcc.info-3 ! 2685676763b ./gcc/doc/gcc.info-30 ! 3916734617b ./gcc/doc/gcc.info-31 ! 2959984157b ./gcc/doc/gcc.info-32 ! 724189298b ./gcc/doc/gcc.info-33 ! 2519660629b ./gcc/doc/gcc.info-34 ! 2263568983b ./gcc/doc/gcc.info-35 ! 1542837359b ./gcc/doc/gcc.info-36 ! 368821868b ./gcc/doc/gcc.info-37 ! 4045307240b ./gcc/doc/gcc.info-38 ! 256280613b ./gcc/doc/gcc.info-4 ! 3438311541b ./gcc/doc/gcc.info-5 ! 3275734139b ./gcc/doc/gcc.info-6 ! 365343764b ./gcc/doc/gcc.info-7 ! 3542229941b ./gcc/doc/gcc.info-8 ! 4144597579b ./gcc/doc/gcc.info-9 ! 2786906619b ./gcc/doc/gcc.texi ! 2957845139b ./gcc/doc/gcov.1 ! 3721190903b ./gcc/doc/gcov.texi ! 2809728324b ./gcc/doc/install-old.texi ! 1710396616b ./gcc/doc/install.texi 3260938793b ./gcc/doc/install.texi2html ! 2768559862b ./gcc/doc/invoke.texi ! 3633827104b ./gcc/doc/md.texi ! 3836082553b ./gcc/doc/objc.texi ! 3771912542b ./gcc/doc/rtl.texi ! 4016541318b ./gcc/doc/texinfo.tex ! 2117823836b ./gcc/doc/tm.texi 472588828b ./gcc/doloop.c 123944430b ./gcc/dominance.c 2660216905b ./gcc/doprint.c --- 1459,1551 ---- 3904470681b ./gcc/cpphash.c 1641754935b ./gcc/cpphash.h 2491140484b ./gcc/cppinit.c ! 352253678b ./gcc/cpplex.c ! 512859427b ./gcc/cpplib.c 3400544410b ./gcc/cpplib.h ! 1284813508b ./gcc/cppmacro.c 373762755b ./gcc/cppmain.c 4137262150b ./gcc/cppspec.c 2903740050b ./gcc/cross-make 1363172067b ./gcc/crtstuff.c ! 2946810917b ./gcc/cse.c 1864237584b ./gcc/cselib.h 216805921b ./gcc/cstamp-h.in 3098946745b ./gcc/dbxout.c 181061183b ./gcc/dbxout.h 1104788844b ./gcc/dbxstclass.h 2469057166b ./gcc/dce.c ! 3555308222b ./gcc/defaults.h 2226328701b ./gcc/dependence.c 4065269356b ./gcc/diagnostic.c 2207352912b ./gcc/diagnostic.h 890851034b ./gcc/doc/.cvsignore ! 4124442826b ./gcc/doc/c-tree.texi ! 3680358381b ./gcc/doc/contrib.texi ! 1311187294b ./gcc/doc/cpp.1 ! 1331953370b ./gcc/doc/cpp.info ! 803760277b ./gcc/doc/cpp.info-1 ! 3665332888b ./gcc/doc/cpp.info-2 ! 3052985070b ./gcc/doc/cpp.info-3 ! 999296888b ./gcc/doc/cpp.info-4 ! 827033126b ./gcc/doc/cpp.texi ! 3141595163b ./gcc/doc/cppinternals.info ! 1445289518b ./gcc/doc/cppinternals.texi ! 2091691828b ./gcc/doc/extend.texi ! 4147779460b ./gcc/doc/gcc.1 ! 3026358753b ./gcc/doc/gcc.info ! 44556827b ./gcc/doc/gcc.info-1 ! 1412220606b ./gcc/doc/gcc.info-10 ! 3943813356b ./gcc/doc/gcc.info-11 ! 418964136b ./gcc/doc/gcc.info-12 ! 4008064171b ./gcc/doc/gcc.info-13 ! 1648213693b ./gcc/doc/gcc.info-14 ! 588011301b ./gcc/doc/gcc.info-15 ! 1754573484b ./gcc/doc/gcc.info-16 ! 3930539567b ./gcc/doc/gcc.info-17 ! 2226344020b ./gcc/doc/gcc.info-18 ! 2417116799b ./gcc/doc/gcc.info-19 ! 3001818438b ./gcc/doc/gcc.info-2 ! 428958887b ./gcc/doc/gcc.info-20 ! 525664717b ./gcc/doc/gcc.info-21 ! 1348937332b ./gcc/doc/gcc.info-22 ! 2619556996b ./gcc/doc/gcc.info-23 ! 1362771598b ./gcc/doc/gcc.info-24 ! 3470688996b ./gcc/doc/gcc.info-25 735287455b ./gcc/doc/gcc.info-26 ! 3209657202b ./gcc/doc/gcc.info-27 ! 1582307263b ./gcc/doc/gcc.info-28 ! 525340619b ./gcc/doc/gcc.info-29 ! 4095656035b ./gcc/doc/gcc.info-3 ! 1331327086b ./gcc/doc/gcc.info-30 ! 3864158157b ./gcc/doc/gcc.info-31 ! 1139465841b ./gcc/doc/gcc.info-32 ! 1565524835b ./gcc/doc/gcc.info-33 ! 278600549b ./gcc/doc/gcc.info-34 ! 3348688145b ./gcc/doc/gcc.info-35 ! 1797713626b ./gcc/doc/gcc.info-36 ! 347664857b ./gcc/doc/gcc.info-37 ! 2743624506b ./gcc/doc/gcc.info-38 ! 701354272b ./gcc/doc/gcc.info-4 ! 352877010b ./gcc/doc/gcc.info-5 ! 979705408b ./gcc/doc/gcc.info-6 ! 1295006596b ./gcc/doc/gcc.info-7 ! 713760857b ./gcc/doc/gcc.info-8 ! 102742701b ./gcc/doc/gcc.info-9 ! 528909035b ./gcc/doc/gcc.texi ! 4138844617b ./gcc/doc/gcov.1 ! 2764453786b ./gcc/doc/gcov.texi ! 1008218839b ./gcc/doc/include/fdl.texi ! 3383701708b ./gcc/doc/include/funding.texi ! 423212962b ./gcc/doc/include/gpl.texi ! 4016541318b ./gcc/doc/include/texinfo.tex ! 2393405651b ./gcc/doc/install-old.texi ! 824388918b ./gcc/doc/install.texi 3260938793b ./gcc/doc/install.texi2html ! 109423404b ./gcc/doc/invoke.texi ! 135097364b ./gcc/doc/md.texi ! 2542227198b ./gcc/doc/objc.texi ! 326027164b ./gcc/doc/rtl.texi ! 548246333b ./gcc/doc/tm.texi 472588828b ./gcc/doloop.c 123944430b ./gcc/dominance.c 2660216905b ./gcc/doprint.c *************** *** 1538,1563 **** 369471853b ./gcc/dwarf2.h 1793399413b ./gcc/dwarf2asm.c 3481577918b ./gcc/dwarf2asm.h ! 1488160616b ./gcc/dwarf2out.c 907111294b ./gcc/dwarf2out.h ! 754816355b ./gcc/dwarfout.c 1589660034b ./gcc/dwarfout.h 883158504b ./gcc/emit-rtl.c 626897841b ./gcc/enquire.c 3097048689b ./gcc/errors.c 3948305090b ./gcc/errors.h ! 584881204b ./gcc/except.c ! 564264302b ./gcc/except.h 3470052574b ./gcc/exgettext 1523181895b ./gcc/explow.c 1640629260b ./gcc/expmed.c ! 1225397931b ./gcc/expr.c 3169905778b ./gcc/expr.h 2920655732b ./gcc/f/.cvsignore 496151338b ./gcc/f/BUGS ! 820287265b ./gcc/f/ChangeLog 4225493150b ./gcc/f/ChangeLog.0 ! 1218727499b ./gcc/f/Make-lang.in 4163515796b ./gcc/f/NEWS 281424983b ./gcc/f/README 3295584012b ./gcc/f/RELEASE-PREP --- 1556,1581 ---- 369471853b ./gcc/dwarf2.h 1793399413b ./gcc/dwarf2asm.c 3481577918b ./gcc/dwarf2asm.h ! 3378597493b ./gcc/dwarf2out.c 907111294b ./gcc/dwarf2out.h ! 1291353303b ./gcc/dwarfout.c 1589660034b ./gcc/dwarfout.h 883158504b ./gcc/emit-rtl.c 626897841b ./gcc/enquire.c 3097048689b ./gcc/errors.c 3948305090b ./gcc/errors.h ! 2201789247b ./gcc/except.c ! 3751320921b ./gcc/except.h 3470052574b ./gcc/exgettext 1523181895b ./gcc/explow.c 1640629260b ./gcc/expmed.c ! 2323165388b ./gcc/expr.c 3169905778b ./gcc/expr.h 2920655732b ./gcc/f/.cvsignore 496151338b ./gcc/f/BUGS ! 3373181774b ./gcc/f/ChangeLog 4225493150b ./gcc/f/ChangeLog.0 ! 1959441375b ./gcc/f/Make-lang.in 4163515796b ./gcc/f/NEWS 281424983b ./gcc/f/README 3295584012b ./gcc/f/RELEASE-PREP *************** *** 1585,1613 **** 4228142157b ./gcc/f/ffe.texi 4039257523b ./gcc/f/fini.c 3733092107b ./gcc/f/g77.1 ! 241163137b ./gcc/f/g77.info ! 2896893254b ./gcc/f/g77.info-1 ! 1622844863b ./gcc/f/g77.info-10 ! 3834817610b ./gcc/f/g77.info-11 ! 4070511737b ./gcc/f/g77.info-12 ! 3423337276b ./gcc/f/g77.info-13 ! 3036236739b ./gcc/f/g77.info-14 ! 3936680485b ./gcc/f/g77.info-15 ! 2996298712b ./gcc/f/g77.info-16 ! 383139042b ./gcc/f/g77.info-17 ! 989725124b ./gcc/f/g77.info-18 ! 3819560121b ./gcc/f/g77.info-19 ! 4234287430b ./gcc/f/g77.info-2 ! 3490219084b ./gcc/f/g77.info-20 ! 1704924576b ./gcc/f/g77.info-21 ! 1313977121b ./gcc/f/g77.info-3 ! 2387683816b ./gcc/f/g77.info-4 ! 1299893292b ./gcc/f/g77.info-5 ! 2387686869b ./gcc/f/g77.info-6 ! 3321447282b ./gcc/f/g77.info-7 ! 3424539201b ./gcc/f/g77.info-8 ! 87243994b ./gcc/f/g77.info-9 ! 4025159766b ./gcc/f/g77.texi 908822112b ./gcc/f/g77install.texi 2350422564b ./gcc/f/g77spec.c 1736110997b ./gcc/f/global.c --- 1603,1631 ---- 4228142157b ./gcc/f/ffe.texi 4039257523b ./gcc/f/fini.c 3733092107b ./gcc/f/g77.1 ! 2516470554b ./gcc/f/g77.info ! 2715588042b ./gcc/f/g77.info-1 ! 1102432768b ./gcc/f/g77.info-10 ! 1616293807b ./gcc/f/g77.info-11 ! 3795023208b ./gcc/f/g77.info-12 ! 3519051234b ./gcc/f/g77.info-13 ! 1552768627b ./gcc/f/g77.info-14 ! 1960100262b ./gcc/f/g77.info-15 ! 164148332b ./gcc/f/g77.info-16 ! 467035421b ./gcc/f/g77.info-17 ! 3347439222b ./gcc/f/g77.info-18 ! 4037002258b ./gcc/f/g77.info-19 ! 3318968689b ./gcc/f/g77.info-2 ! 3405824903b ./gcc/f/g77.info-20 ! 2060286223b ./gcc/f/g77.info-21 ! 2778233086b ./gcc/f/g77.info-3 ! 2427118973b ./gcc/f/g77.info-4 ! 4200013360b ./gcc/f/g77.info-5 ! 2522641008b ./gcc/f/g77.info-6 ! 87613785b ./gcc/f/g77.info-7 ! 3338319587b ./gcc/f/g77.info-8 ! 2783591220b ./gcc/f/g77.info-9 ! 4105631864b ./gcc/f/g77.texi 908822112b ./gcc/f/g77install.texi 2350422564b ./gcc/f/g77spec.c 1736110997b ./gcc/f/global.c *************** *** 1682,1693 **** 1323122026b ./gcc/f/symbol.def 4185634583b ./gcc/f/symbol.h 2744008879b ./gcc/f/target.c ! 3449489563b ./gcc/f/target.h ! 4215788723b ./gcc/f/top.c 4257635887b ./gcc/f/top.h 3443401298b ./gcc/f/type.c 1269043734b ./gcc/f/type.h ! 1156606720b ./gcc/f/version.c 1880947867b ./gcc/f/version.h 3584291506b ./gcc/f/where.c 422122823b ./gcc/f/where.h --- 1700,1711 ---- 1323122026b ./gcc/f/symbol.def 4185634583b ./gcc/f/symbol.h 2744008879b ./gcc/f/target.c ! 2888576815b ./gcc/f/target.h ! 3965009956b ./gcc/f/top.c 4257635887b ./gcc/f/top.h 3443401298b ./gcc/f/type.c 1269043734b ./gcc/f/type.h ! 1656514385b ./gcc/f/version.c 1880947867b ./gcc/f/version.h 3584291506b ./gcc/f/where.c 422122823b ./gcc/f/where.h *************** *** 1695,1722 **** 3904468581b ./gcc/fix-header.c 3884502794b ./gcc/fixinc/Makefile.in 2351321356b ./gcc/fixinc/README ! 433197538b ./gcc/fixinc/check.tpl ! 3999542363b ./gcc/fixinc/fixfixes.c 3110054233b ./gcc/fixinc/fixinc.dgux 15758129b ./gcc/fixinc/fixinc.interix 1474597097b ./gcc/fixinc/fixinc.ptx 1901674452b ./gcc/fixinc/fixinc.svr4 2193207840b ./gcc/fixinc/fixinc.winnt 1439814780b ./gcc/fixinc/fixinc.wrap ! 2906960178b ./gcc/fixinc/fixincl.c 4214658264b ./gcc/fixinc/fixincl.sh ! 221292981b ./gcc/fixinc/fixincl.tpl ! 1313419292b ./gcc/fixinc/fixincl.x 1372603529b ./gcc/fixinc/fixlib.c ! 1143765881b ./gcc/fixinc/fixlib.h 4013194329b ./gcc/fixinc/fixtests.c 2003329934b ./gcc/fixinc/genfixes 3680461708b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 1935697826b ./gcc/fixinc/inclhack.def 1662855861b ./gcc/fixinc/mkfixinc.sh 3901871541b ./gcc/fixinc/procopen.c ! 3469897683b ./gcc/fixinc/server.c 2895407134b ./gcc/fixinc/server.h 1516247519b ./gcc/fixinc/tests/base/X11/Intrinsic.h 2715935838b ./gcc/fixinc/tests/base/X11/ShellP.h --- 1713,1740 ---- 3904468581b ./gcc/fix-header.c 3884502794b ./gcc/fixinc/Makefile.in 2351321356b ./gcc/fixinc/README ! 2497636676b ./gcc/fixinc/check.tpl ! 2400562783b ./gcc/fixinc/fixfixes.c 3110054233b ./gcc/fixinc/fixinc.dgux 15758129b ./gcc/fixinc/fixinc.interix 1474597097b ./gcc/fixinc/fixinc.ptx 1901674452b ./gcc/fixinc/fixinc.svr4 2193207840b ./gcc/fixinc/fixinc.winnt 1439814780b ./gcc/fixinc/fixinc.wrap ! 2436281382b ./gcc/fixinc/fixincl.c 4214658264b ./gcc/fixinc/fixincl.sh ! 2178021789b ./gcc/fixinc/fixincl.tpl ! 1313142376b ./gcc/fixinc/fixincl.x 1372603529b ./gcc/fixinc/fixlib.c ! 971233728b ./gcc/fixinc/fixlib.h 4013194329b ./gcc/fixinc/fixtests.c 2003329934b ./gcc/fixinc/genfixes 3680461708b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 726275978b ./gcc/fixinc/inclhack.def 1662855861b ./gcc/fixinc/mkfixinc.sh 3901871541b ./gcc/fixinc/procopen.c ! 1750379031b ./gcc/fixinc/server.c 2895407134b ./gcc/fixinc/server.h 1516247519b ./gcc/fixinc/tests/base/X11/Intrinsic.h 2715935838b ./gcc/fixinc/tests/base/X11/ShellP.h *************** *** 1726,1732 **** 1165473466b ./gcc/fixinc/tests/base/ansi/math.h 3124694417b ./gcc/fixinc/tests/base/ansi/stdlib.h 2980092932b ./gcc/fixinc/tests/base/arch/i960/archI960.h ! 4268929430b ./gcc/fixinc/tests/base/arpa/inet.h 2535365837b ./gcc/fixinc/tests/base/assert.h 3220984809b ./gcc/fixinc/tests/base/bsd/libc.h 1799847368b ./gcc/fixinc/tests/base/c_asm.h --- 1744,1750 ---- 1165473466b ./gcc/fixinc/tests/base/ansi/math.h 3124694417b ./gcc/fixinc/tests/base/ansi/stdlib.h 2980092932b ./gcc/fixinc/tests/base/arch/i960/archI960.h ! 1062137968b ./gcc/fixinc/tests/base/arpa/inet.h 2535365837b ./gcc/fixinc/tests/base/assert.h 3220984809b ./gcc/fixinc/tests/base/bsd/libc.h 1799847368b ./gcc/fixinc/tests/base/c_asm.h *************** *** 1740,1750 **** 2670651204b ./gcc/fixinc/tests/base/libgen.h 1854625388b ./gcc/fixinc/tests/base/machine/cpu.h 114078425b ./gcc/fixinc/tests/base/malloc.h ! 1955826929b ./gcc/fixinc/tests/base/math.h 2373596333b ./gcc/fixinc/tests/base/netdnet/dnetdb.h 4211518276b ./gcc/fixinc/tests/base/netinet/ip.h 3107111098b ./gcc/fixinc/tests/base/pixrect/memvar.h ! 382661683b ./gcc/fixinc/tests/base/pthread.h 351364386b ./gcc/fixinc/tests/base/reg_types.h 2876721819b ./gcc/fixinc/tests/base/regex.h 2249464053b ./gcc/fixinc/tests/base/rpc/auth.h --- 1758,1768 ---- 2670651204b ./gcc/fixinc/tests/base/libgen.h 1854625388b ./gcc/fixinc/tests/base/machine/cpu.h 114078425b ./gcc/fixinc/tests/base/malloc.h ! 575808734b ./gcc/fixinc/tests/base/math.h 2373596333b ./gcc/fixinc/tests/base/netdnet/dnetdb.h 4211518276b ./gcc/fixinc/tests/base/netinet/ip.h 3107111098b ./gcc/fixinc/tests/base/pixrect/memvar.h ! 634408265b ./gcc/fixinc/tests/base/pthread.h 351364386b ./gcc/fixinc/tests/base/reg_types.h 2876721819b ./gcc/fixinc/tests/base/regex.h 2249464053b ./gcc/fixinc/tests/base/rpc/auth.h *************** *** 1754,1761 **** 1831085175b ./gcc/fixinc/tests/base/rpcsvc/rstat.h 2162639252b ./gcc/fixinc/tests/base/rpcsvc/rusers.h 135186565b ./gcc/fixinc/tests/base/sparc/asm_linkage.h ! 3672977850b ./gcc/fixinc/tests/base/stdio.h ! 4177211172b ./gcc/fixinc/tests/base/stdlib.h 2941232612b ./gcc/fixinc/tests/base/strings.h 482468002b ./gcc/fixinc/tests/base/sundev/vuid_event.h 1807434691b ./gcc/fixinc/tests/base/sunwindow/win_lock.h --- 1772,1779 ---- 1831085175b ./gcc/fixinc/tests/base/rpcsvc/rstat.h 2162639252b ./gcc/fixinc/tests/base/rpcsvc/rusers.h 135186565b ./gcc/fixinc/tests/base/sparc/asm_linkage.h ! 2145323530b ./gcc/fixinc/tests/base/stdio.h ! 135522837b ./gcc/fixinc/tests/base/stdlib.h 2941232612b ./gcc/fixinc/tests/base/strings.h 482468002b ./gcc/fixinc/tests/base/sundev/vuid_event.h 1807434691b ./gcc/fixinc/tests/base/sunwindow/win_lock.h *************** *** 1788,1794 **** 2898428361b ./gcc/flow.c 3036032403b ./gcc/fold-const.c 814448160b ./gcc/fp-test.c ! 3371479866b ./gcc/function.c 1538066423b ./gcc/function.h 1945284764b ./gcc/future.options 4221598017b ./gcc/gansidecl.h --- 1806,1812 ---- 2898428361b ./gcc/flow.c 3036032403b ./gcc/fold-const.c 814448160b ./gcc/fp-test.c ! 1653566373b ./gcc/function.c 1538066423b ./gcc/function.h 1945284764b ./gcc/future.options 4221598017b ./gcc/gansidecl.h *************** *** 1833,1839 **** 4095609490b ./gcc/ginclude/stdbool.h 888602182b ./gcc/ginclude/stddef.h 673473982b ./gcc/ginclude/varargs.h ! 396130885b ./gcc/glimits.h 1473153467b ./gcc/global.c 1296086035b ./gcc/gmon.c 2371574518b ./gcc/graph.c --- 1851,1857 ---- 4095609490b ./gcc/ginclude/stdbool.h 888602182b ./gcc/ginclude/stddef.h 673473982b ./gcc/ginclude/varargs.h ! 781372572b ./gcc/glimits.h 1473153467b ./gcc/global.c 1296086035b ./gcc/gmon.c 2371574518b ./gcc/graph.c *************** *** 1843,1850 **** 808024354b ./gcc/gsyslimits.h 517312911b ./gcc/gthr-aix.h 1056858492b ./gcc/gthr-dce.h ! 3998305062b ./gcc/gthr-posix.h ! 3623976832b ./gcc/gthr-rtems.h 2905827269b ./gcc/gthr-single.h 1038062946b ./gcc/gthr-solaris.h 2035828726b ./gcc/gthr-vxworks.h --- 1861,1868 ---- 808024354b ./gcc/gsyslimits.h 517312911b ./gcc/gthr-aix.h 1056858492b ./gcc/gthr-dce.h ! 1504011079b ./gcc/gthr-posix.h ! 386453848b ./gcc/gthr-rtems.h 2905827269b ./gcc/gthr-single.h 1038062946b ./gcc/gthr-solaris.h 2035828726b ./gcc/gthr-vxworks.h *************** *** 1864,1870 **** 2996455768b ./gcc/integrate.h 1933110400b ./gcc/intl.c 1326021680b ./gcc/intl.h ! 2342945531b ./gcc/intl/ChangeLog 2608513953b ./gcc/intl/Makefile.in 1035788439b ./gcc/intl/VERSION 2050167308b ./gcc/intl/bindtextdom.c --- 1882,1888 ---- 2996455768b ./gcc/integrate.h 1933110400b ./gcc/intl.c 1326021680b ./gcc/intl.h ! 3523133344b ./gcc/intl/ChangeLog 2608513953b ./gcc/intl/Makefile.in 1035788439b ./gcc/intl/VERSION 2050167308b ./gcc/intl/bindtextdom.c *************** *** 1888,1895 **** 3722123962b ./gcc/intl/textdomain.c 2960721199b ./gcc/intl/xopen-msg.sed 4005572097b ./gcc/java/.cvsignore ! 1484818816b ./gcc/java/ChangeLog ! 3719342103b ./gcc/java/Make-lang.in 3788283147b ./gcc/java/boehm.c 2541917855b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h --- 1906,1913 ---- 3722123962b ./gcc/intl/textdomain.c 2960721199b ./gcc/intl/xopen-msg.sed 4005572097b ./gcc/java/.cvsignore ! 1719265326b ./gcc/java/ChangeLog ! 3199045892b ./gcc/java/Make-lang.in 3788283147b ./gcc/java/boehm.c 2541917855b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h *************** *** 1902,1909 **** 2740930497b ./gcc/java/decl.c 3124910668b ./gcc/java/except.c 1619508635b ./gcc/java/expr.c ! 4138715670b ./gcc/java/gcj.info ! 2703779289b ./gcc/java/gcj.texi 4209811621b ./gcc/java/gen-table.pl 3950168328b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h --- 1920,1927 ---- 2740930497b ./gcc/java/decl.c 3124910668b ./gcc/java/except.c 1619508635b ./gcc/java/expr.c ! 2186347127b ./gcc/java/gcj.info ! 271445606b ./gcc/java/gcj.texi 4209811621b ./gcc/java/gen-table.pl 3950168328b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h *************** *** 1921,1940 **** 1146326619b ./gcc/java/jcf-write.c 1809110177b ./gcc/java/jcf.h 2686701189b ./gcc/java/jv-scan.c ! 3150919228b ./gcc/java/jvgenmain.c ! 2681204233b ./gcc/java/jvspec.c 3567108747b ./gcc/java/keyword.gperf 1595011281b ./gcc/java/keyword.h 1056131461b ./gcc/java/lang-options.h 2810580326b ./gcc/java/lang-specs.h 1733878774b ./gcc/java/lang.c ! 2873821990b ./gcc/java/lex.c ! 3114472201b ./gcc/java/lex.h 3274830053b ./gcc/java/mangle.c 2248284043b ./gcc/java/mangle_name.c ! 1917644840b ./gcc/java/parse-scan.c 578153036b ./gcc/java/parse-scan.y ! 4033500482b ./gcc/java/parse.c 790738941b ./gcc/java/parse.h 3618600566b ./gcc/java/parse.y 3137203029b ./gcc/java/typeck.c --- 1939,1958 ---- 1146326619b ./gcc/java/jcf-write.c 1809110177b ./gcc/java/jcf.h 2686701189b ./gcc/java/jv-scan.c ! 4138083440b ./gcc/java/jvgenmain.c ! 3557411428b ./gcc/java/jvspec.c 3567108747b ./gcc/java/keyword.gperf 1595011281b ./gcc/java/keyword.h 1056131461b ./gcc/java/lang-options.h 2810580326b ./gcc/java/lang-specs.h 1733878774b ./gcc/java/lang.c ! 1642003161b ./gcc/java/lex.c ! 1271687574b ./gcc/java/lex.h 3274830053b ./gcc/java/mangle.c 2248284043b ./gcc/java/mangle_name.c ! 3982948195b ./gcc/java/parse-scan.c 578153036b ./gcc/java/parse-scan.y ! 2381650795b ./gcc/java/parse.c 790738941b ./gcc/java/parse.h 3618600566b ./gcc/java/parse.y 3137203029b ./gcc/java/typeck.c *************** *** 1943,1949 **** 3070080051b ./gcc/java/xref.h 2742723736b ./gcc/java/zextract.c 1368240654b ./gcc/java/zipfile.h ! 2392549891b ./gcc/jump.c 3310289094b ./gcc/lcm.c 1452643639b ./gcc/libgcc-std.ver 987096986b ./gcc/libgcc1-test.c --- 1961,1967 ---- 3070080051b ./gcc/java/xref.h 2742723736b ./gcc/java/zextract.c 1368240654b ./gcc/java/zipfile.h ! 3775245805b ./gcc/jump.c 3310289094b ./gcc/lcm.c 1452643639b ./gcc/libgcc-std.ver 987096986b ./gcc/libgcc1-test.c *************** *** 1965,1971 **** 1233620396b ./gcc/mbchar.c 2058944294b ./gcc/mbchar.h 3764019377b ./gcc/mips-tdump.c ! 2085459586b ./gcc/mips-tfile.c 72945903b ./gcc/mkconfig.sh 1872345184b ./gcc/mkdeps.c 1784521594b ./gcc/mkdeps.h --- 1983,1989 ---- 1233620396b ./gcc/mbchar.c 2058944294b ./gcc/mbchar.h 3764019377b ./gcc/mips-tdump.c ! 1819966709b ./gcc/mips-tfile.c 72945903b ./gcc/mkconfig.sh 1872345184b ./gcc/mkdeps.c 1784521594b ./gcc/mkdeps.h *************** *** 1980,2027 **** 1290836098b ./gcc/objc/config-lang.in 588115418b ./gcc/objc/lang-options.h 2977909645b ./gcc/objc/lang-specs.h ! 1216949256b ./gcc/objc/objc-act.c 3444272236b ./gcc/objc/objc-act.h ! 3815467981b ./gcc/objc/objc-parse.c 3649582771b ./gcc/objc/objc-parse.y 620378166b ./gcc/objc/objc-tree.def 1567868913b ./gcc/objc/objc.gperf ! 1365820517b ./gcc/optabs.c 780547048b ./gcc/output.h 2930919949b ./gcc/params.c ! 2960897409b ./gcc/params.def ! 4228965694b ./gcc/params.h 1987145824b ./gcc/patch-apollo-includes ! 1083982585b ./gcc/po/ChangeLog 1909445789b ./gcc/po/Makefile.in.in 230456843b ./gcc/po/POTFILES.in 2625119691b ./gcc/po/cat-id-tbl.c 793353780b ./gcc/po/gcc.pot 216805921b ./gcc/po/stamp-cat-id 426208372b ./gcc/po/sv.po ! 1011284471b ./gcc/predict.c 1215810064b ./gcc/prefix.c 3118553823b ./gcc/prefix.h 1935701222b ./gcc/print-rtl.c 1190448249b ./gcc/print-tree.c ! 3419361579b ./gcc/profile.c 2243120815b ./gcc/protoize.c 2622627904b ./gcc/real.c 1203040742b ./gcc/real.h ! 2162777379b ./gcc/recog.c 3792773945b ./gcc/recog.h 3444596851b ./gcc/reg-stack.c ! 739086772b ./gcc/regclass.c ! 2924451269b ./gcc/regmove.c ! 830294658b ./gcc/regrename.c 3830393261b ./gcc/regs.h ! 808516955b ./gcc/reload.c 725417840b ./gcc/reload.h 2875210057b ./gcc/reload1.c ! 1751303594b ./gcc/reorg.c 1244398550b ./gcc/resource.c 1586797891b ./gcc/resource.h ! 3991947770b ./gcc/rtl.c 1510325517b ./gcc/rtl.def 4008567039b ./gcc/rtl.h 222251668b ./gcc/rtlanal.c --- 1998,2045 ---- 1290836098b ./gcc/objc/config-lang.in 588115418b ./gcc/objc/lang-options.h 2977909645b ./gcc/objc/lang-specs.h ! 4226828284b ./gcc/objc/objc-act.c 3444272236b ./gcc/objc/objc-act.h ! 1482096497b ./gcc/objc/objc-parse.c 3649582771b ./gcc/objc/objc-parse.y 620378166b ./gcc/objc/objc-tree.def 1567868913b ./gcc/objc/objc.gperf ! 3926640974b ./gcc/optabs.c 780547048b ./gcc/output.h 2930919949b ./gcc/params.c ! 52078911b ./gcc/params.def ! 200901683b ./gcc/params.h 1987145824b ./gcc/patch-apollo-includes ! 755698090b ./gcc/po/ChangeLog 1909445789b ./gcc/po/Makefile.in.in 230456843b ./gcc/po/POTFILES.in 2625119691b ./gcc/po/cat-id-tbl.c 793353780b ./gcc/po/gcc.pot 216805921b ./gcc/po/stamp-cat-id 426208372b ./gcc/po/sv.po ! 3613543765b ./gcc/predict.c 1215810064b ./gcc/prefix.c 3118553823b ./gcc/prefix.h 1935701222b ./gcc/print-rtl.c 1190448249b ./gcc/print-tree.c ! 4192602583b ./gcc/profile.c 2243120815b ./gcc/protoize.c 2622627904b ./gcc/real.c 1203040742b ./gcc/real.h ! 3488595237b ./gcc/recog.c 3792773945b ./gcc/recog.h 3444596851b ./gcc/reg-stack.c ! 1357530535b ./gcc/regclass.c ! 1810934709b ./gcc/regmove.c ! 2758954720b ./gcc/regrename.c 3830393261b ./gcc/regs.h ! 653206572b ./gcc/reload.c 725417840b ./gcc/reload.h 2875210057b ./gcc/reload1.c ! 2155579804b ./gcc/reorg.c 1244398550b ./gcc/resource.c 1586797891b ./gcc/resource.h ! 4283544518b ./gcc/rtl.c 1510325517b ./gcc/rtl.def 4008567039b ./gcc/rtl.h 222251668b ./gcc/rtlanal.c *************** *** 2031,2039 **** 3912741047b ./gcc/scan-types.sh 2929263455b ./gcc/scan.c 1244301251b ./gcc/scan.h ! 3021935636b ./gcc/sched-deps.c 1096437805b ./gcc/sched-ebb.c ! 1506568753b ./gcc/sched-int.h 581894034b ./gcc/sched-rgn.c 4091631937b ./gcc/sched-vis.c 3073218432b ./gcc/sdbout.c --- 2049,2057 ---- 3912741047b ./gcc/scan-types.sh 2929263455b ./gcc/scan.c 1244301251b ./gcc/scan.h ! 4087293714b ./gcc/sched-deps.c 1096437805b ./gcc/sched-ebb.c ! 4098187407b ./gcc/sched-int.h 581894034b ./gcc/sched-rgn.c 4091631937b ./gcc/sched-vis.c 3073218432b ./gcc/sdbout.c *************** *** 2045,2057 **** 213938074b ./gcc/ssa.h 2395322097b ./gcc/stab.def 471587796b ./gcc/stack.h ! 794966908b ./gcc/stmt.c 3592329788b ./gcc/stor-layout.c 1839687809b ./gcc/stringpool.c 567176141b ./gcc/sys-protos.h 482558466b ./gcc/sys-types.h 949648988b ./gcc/system.h ! 3112552250b ./gcc/testsuite/ChangeLog 986418331b ./gcc/testsuite/README 4258789052b ./gcc/testsuite/README.g++ 174183124b ./gcc/testsuite/README.gcc --- 2063,2075 ---- 213938074b ./gcc/ssa.h 2395322097b ./gcc/stab.def 471587796b ./gcc/stack.h ! 335514606b ./gcc/stmt.c 3592329788b ./gcc/stor-layout.c 1839687809b ./gcc/stringpool.c 567176141b ./gcc/sys-protos.h 482558466b ./gcc/sys-types.h 949648988b ./gcc/system.h ! 1804751077b ./gcc/testsuite/ChangeLog 986418331b ./gcc/testsuite/README 4258789052b ./gcc/testsuite/README.g++ 174183124b ./gcc/testsuite/README.gcc *************** *** 2077,2082 **** --- 2095,2101 ---- 2936636767b ./gcc/testsuite/g++.old-deja/g++.abi/empty.C 4096109742b ./gcc/testsuite/g++.old-deja/g++.abi/empty2.C 1878628007b ./gcc/testsuite/g++.old-deja/g++.abi/empty3.C + 2464785360b ./gcc/testsuite/g++.old-deja/g++.abi/empty4.C 239352654b ./gcc/testsuite/g++.old-deja/g++.abi/layout1.C 3009318595b ./gcc/testsuite/g++.old-deja/g++.abi/mangle1.C 694100951b ./gcc/testsuite/g++.old-deja/g++.abi/primary.C *************** *** 2093,2098 **** --- 2112,2121 ---- 2484396991b ./gcc/testsuite/g++.old-deja/g++.abi/vbase5.C 762829112b ./gcc/testsuite/g++.old-deja/g++.abi/vbase6.C 2351342219b ./gcc/testsuite/g++.old-deja/g++.abi/vbase7.C + 3172517351b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-10.C + 995467002b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-21.C + 3642163828b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-22.C + 3914589079b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-5.C 3332397893b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-9.C 186405531b ./gcc/testsuite/g++.old-deja/g++.abi/vmihint.C 2313706108b ./gcc/testsuite/g++.old-deja/g++.abi/vtable.C *************** *** 2108,2113 **** --- 2131,2137 ---- 255582158b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3h.C 3409231452b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3i.C 895613077b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3j.C + 4124551189b ./gcc/testsuite/g++.old-deja/g++.abi/vthunk1.C 3056861018b ./gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore 3645238009b ./gcc/testsuite/g++.old-deja/g++.benjamin/13478.C 1290057507b ./gcc/testsuite/g++.old-deja/g++.benjamin/13523.C *************** *** 3599,3605 **** 3189296082b ./gcc/testsuite/g++.old-deja/g++.mike/p2746.C 2655922230b ./gcc/testsuite/g++.old-deja/g++.mike/p2793.C 2222530613b ./gcc/testsuite/g++.old-deja/g++.mike/p2806.C ! 317527659b ./gcc/testsuite/g++.old-deja/g++.mike/p2846.C 3941688151b ./gcc/testsuite/g++.old-deja/g++.mike/p2846a.C 481437008b ./gcc/testsuite/g++.old-deja/g++.mike/p2846b.C 231166541b ./gcc/testsuite/g++.old-deja/g++.mike/p2855.C --- 3623,3629 ---- 3189296082b ./gcc/testsuite/g++.old-deja/g++.mike/p2746.C 2655922230b ./gcc/testsuite/g++.old-deja/g++.mike/p2793.C 2222530613b ./gcc/testsuite/g++.old-deja/g++.mike/p2806.C ! 1350283959b ./gcc/testsuite/g++.old-deja/g++.mike/p2846.C 3941688151b ./gcc/testsuite/g++.old-deja/g++.mike/p2846a.C 481437008b ./gcc/testsuite/g++.old-deja/g++.mike/p2846b.C 231166541b ./gcc/testsuite/g++.old-deja/g++.mike/p2855.C *************** *** 3819,3825 **** 2018913859b ./gcc/testsuite/g++.old-deja/g++.ns/ns11.C 1953910502b ./gcc/testsuite/g++.old-deja/g++.ns/ns12.C 1783653783b ./gcc/testsuite/g++.old-deja/g++.ns/ns13.C ! 897870685b ./gcc/testsuite/g++.old-deja/g++.ns/ns14.C 3477570937b ./gcc/testsuite/g++.old-deja/g++.ns/ns15.C 3961933508b ./gcc/testsuite/g++.old-deja/g++.ns/ns16.C 2083452456b ./gcc/testsuite/g++.old-deja/g++.ns/ns17.C --- 3843,3849 ---- 2018913859b ./gcc/testsuite/g++.old-deja/g++.ns/ns11.C 1953910502b ./gcc/testsuite/g++.old-deja/g++.ns/ns12.C 1783653783b ./gcc/testsuite/g++.old-deja/g++.ns/ns13.C ! 649484463b ./gcc/testsuite/g++.old-deja/g++.ns/ns14.C 3477570937b ./gcc/testsuite/g++.old-deja/g++.ns/ns15.C 3961933508b ./gcc/testsuite/g++.old-deja/g++.ns/ns16.C 2083452456b ./gcc/testsuite/g++.old-deja/g++.ns/ns17.C *************** *** 3847,3852 **** --- 3871,3877 ---- 1942781319b ./gcc/testsuite/g++.old-deja/g++.ns/template14.C 4227768604b ./gcc/testsuite/g++.old-deja/g++.ns/template15.C 3733063651b ./gcc/testsuite/g++.old-deja/g++.ns/template17.C + 1888321924b ./gcc/testsuite/g++.old-deja/g++.ns/template18.C 2875853595b ./gcc/testsuite/g++.old-deja/g++.ns/template2.C 1112300813b ./gcc/testsuite/g++.old-deja/g++.ns/template3.C 2350177435b ./gcc/testsuite/g++.old-deja/g++.ns/template4.C *************** *** 3872,3878 **** 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 1098981319b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C --- 3897,3903 ---- 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 242949782b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C *************** *** 3941,3947 **** --- 3966,3974 ---- 2041445169b ./gcc/testsuite/g++.old-deja/g++.other/array2.C 817672117b ./gcc/testsuite/g++.old-deja/g++.other/array3.C 4210498948b ./gcc/testsuite/g++.old-deja/g++.other/array4.C + 1839235782b ./gcc/testsuite/g++.old-deja/g++.other/array5.C 775293500b ./gcc/testsuite/g++.old-deja/g++.other/asm1.C + 2120817147b ./gcc/testsuite/g++.old-deja/g++.other/asm2.C 4169192453b ./gcc/testsuite/g++.old-deja/g++.other/badarrow.C 1457616136b ./gcc/testsuite/g++.old-deja/g++.other/badopt1.C 578421507b ./gcc/testsuite/g++.old-deja/g++.other/base1.C *************** *** 3973,3978 **** --- 4000,4006 ---- 670388594b ./gcc/testsuite/g++.old-deja/g++.other/cond4.C 1262376075b ./gcc/testsuite/g++.old-deja/g++.other/cond5.C 2676026586b ./gcc/testsuite/g++.old-deja/g++.other/cond6.C + 1953534421b ./gcc/testsuite/g++.old-deja/g++.other/cond7.C 2177760584b ./gcc/testsuite/g++.old-deja/g++.other/const1.C 815940719b ./gcc/testsuite/g++.old-deja/g++.other/const2.C 3115773883b ./gcc/testsuite/g++.old-deja/g++.other/conv1.C *************** *** 4021,4026 **** --- 4049,4055 ---- 226105322b ./gcc/testsuite/g++.old-deja/g++.other/crash4.C 2473163715b ./gcc/testsuite/g++.old-deja/g++.other/crash40.C 2559623170b ./gcc/testsuite/g++.old-deja/g++.other/crash41.C + 2300001961b ./gcc/testsuite/g++.old-deja/g++.other/crash42.C 1657789856b ./gcc/testsuite/g++.old-deja/g++.other/crash5.C 3212679954b ./gcc/testsuite/g++.old-deja/g++.other/crash6.C 3092570108b ./gcc/testsuite/g++.old-deja/g++.other/crash7.C *************** *** 4098,4103 **** --- 4127,4133 ---- 3143843455b ./gcc/testsuite/g++.old-deja/g++.other/eh4.C 3053308594b ./gcc/testsuite/g++.old-deja/g++.other/elab1.C 1328545493b ./gcc/testsuite/g++.old-deja/g++.other/empty1.C + 3170636835b ./gcc/testsuite/g++.old-deja/g++.other/empty2.C 845552508b ./gcc/testsuite/g++.old-deja/g++.other/enum1.C 1384469113b ./gcc/testsuite/g++.old-deja/g++.other/enum2.C 3409398862b ./gcc/testsuite/g++.old-deja/g++.other/enum3.C *************** *** 4174,4179 **** --- 4204,4210 ---- 448802586b ./gcc/testsuite/g++.old-deja/g++.other/lineno2.C 1798112973b ./gcc/testsuite/g++.old-deja/g++.other/lineno3.C 3724478549b ./gcc/testsuite/g++.old-deja/g++.other/lineno4.C + 3655515541b ./gcc/testsuite/g++.old-deja/g++.other/lineno5.C 1356735834b ./gcc/testsuite/g++.old-deja/g++.other/linkage1.C 2749431766b ./gcc/testsuite/g++.old-deja/g++.other/linkage2.C 3893718025b ./gcc/testsuite/g++.old-deja/g++.other/linkage3.C *************** *** 4235,4240 **** --- 4266,4272 ---- 2885764662b ./gcc/testsuite/g++.old-deja/g++.other/optimize1.C 2096609897b ./gcc/testsuite/g++.old-deja/g++.other/optimize2.C 551298218b ./gcc/testsuite/g++.old-deja/g++.other/optimize3.C + 3940439065b ./gcc/testsuite/g++.old-deja/g++.other/optimize4.C 3254521143b ./gcc/testsuite/g++.old-deja/g++.other/overcnv1.C 96458692b ./gcc/testsuite/g++.old-deja/g++.other/overcnv2.C 2161968240b ./gcc/testsuite/g++.old-deja/g++.other/overload1.C *************** *** 4252,4257 **** --- 4284,4290 ---- 898570990b ./gcc/testsuite/g++.old-deja/g++.other/overload8.C 4060052726b ./gcc/testsuite/g++.old-deja/g++.other/overload9.C 1262277324b ./gcc/testsuite/g++.old-deja/g++.other/override1.C + 1380865006b ./gcc/testsuite/g++.old-deja/g++.other/override2.C 1890760625b ./gcc/testsuite/g++.old-deja/g++.other/parse1.C 1658949221b ./gcc/testsuite/g++.old-deja/g++.other/parse2.C 3458348700b ./gcc/testsuite/g++.old-deja/g++.other/perf1.C *************** *** 4322,4328 **** 3148107112b ./gcc/testsuite/g++.old-deja/g++.other/static6.C 456365368b ./gcc/testsuite/g++.old-deja/g++.other/static7.C 1409972884b ./gcc/testsuite/g++.old-deja/g++.other/static9.C ! 1556203396b ./gcc/testsuite/g++.old-deja/g++.other/std1.C 574242123b ./gcc/testsuite/g++.old-deja/g++.other/stmtexpr1.C 3308418318b ./gcc/testsuite/g++.old-deja/g++.other/string1.C 3417212046b ./gcc/testsuite/g++.old-deja/g++.other/string2.C --- 4355,4361 ---- 3148107112b ./gcc/testsuite/g++.old-deja/g++.other/static6.C 456365368b ./gcc/testsuite/g++.old-deja/g++.other/static7.C 1409972884b ./gcc/testsuite/g++.old-deja/g++.other/static9.C ! 910948586b ./gcc/testsuite/g++.old-deja/g++.other/std1.C 574242123b ./gcc/testsuite/g++.old-deja/g++.other/stmtexpr1.C 3308418318b ./gcc/testsuite/g++.old-deja/g++.other/string1.C 3417212046b ./gcc/testsuite/g++.old-deja/g++.other/string2.C *************** *** 4478,4483 **** --- 4511,4517 ---- 3223409625b ./gcc/testsuite/g++.old-deja/g++.pt/crash63.C 3150696822b ./gcc/testsuite/g++.old-deja/g++.pt/crash64.C 3278220743b ./gcc/testsuite/g++.old-deja/g++.pt/crash65.C + 2591611103b ./gcc/testsuite/g++.old-deja/g++.pt/crash68.C 3887562144b ./gcc/testsuite/g++.old-deja/g++.pt/crash7.C 423406852b ./gcc/testsuite/g++.old-deja/g++.pt/crash8.C 2256920146b ./gcc/testsuite/g++.old-deja/g++.pt/crash9.C *************** *** 4494,4499 **** --- 4528,4534 ---- 1268727238b ./gcc/testsuite/g++.old-deja/g++.pt/deduct4.C 2614275894b ./gcc/testsuite/g++.old-deja/g++.pt/deduct5.C 606334760b ./gcc/testsuite/g++.old-deja/g++.pt/deduct6.C + 340374206b ./gcc/testsuite/g++.old-deja/g++.pt/deduct7.C 2858847781b ./gcc/testsuite/g++.old-deja/g++.pt/defarg.C 940625563b ./gcc/testsuite/g++.old-deja/g++.pt/defarg10.C 3439579652b ./gcc/testsuite/g++.old-deja/g++.pt/defarg11.C *************** *** 4879,4885 **** 1609222984b ./gcc/testsuite/g++.old-deja/g++.pt/pointer1.C 667276243b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C 2621744921b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem10.C ! 3012586979b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C 3615617559b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C 886281225b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C 716987062b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C --- 4914,4920 ---- 1609222984b ./gcc/testsuite/g++.old-deja/g++.pt/pointer1.C 667276243b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C 2621744921b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem10.C ! 1628163413b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C 3615617559b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C 886281225b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C 716987062b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C *************** *** 4949,4958 **** 3499532117b ./gcc/testsuite/g++.old-deja/g++.pt/static10.C 3264521084b ./gcc/testsuite/g++.old-deja/g++.pt/static11.C 3095826275b ./gcc/testsuite/g++.old-deja/g++.pt/static2.C ! 455754099b ./gcc/testsuite/g++.old-deja/g++.pt/static3.C 4121342217b ./gcc/testsuite/g++.old-deja/g++.pt/static4.C 637809399b ./gcc/testsuite/g++.old-deja/g++.pt/static5.C ! 1983583438b ./gcc/testsuite/g++.old-deja/g++.pt/static6.C 1808791646b ./gcc/testsuite/g++.old-deja/g++.pt/static7.C 3987560353b ./gcc/testsuite/g++.old-deja/g++.pt/static8.C 1860907942b ./gcc/testsuite/g++.old-deja/g++.pt/static9.C --- 4984,4993 ---- 3499532117b ./gcc/testsuite/g++.old-deja/g++.pt/static10.C 3264521084b ./gcc/testsuite/g++.old-deja/g++.pt/static11.C 3095826275b ./gcc/testsuite/g++.old-deja/g++.pt/static2.C ! 3043759182b ./gcc/testsuite/g++.old-deja/g++.pt/static3.C 4121342217b ./gcc/testsuite/g++.old-deja/g++.pt/static4.C 637809399b ./gcc/testsuite/g++.old-deja/g++.pt/static5.C ! 3443961587b ./gcc/testsuite/g++.old-deja/g++.pt/static6.C 1808791646b ./gcc/testsuite/g++.old-deja/g++.pt/static7.C 3987560353b ./gcc/testsuite/g++.old-deja/g++.pt/static8.C 1860907942b ./gcc/testsuite/g++.old-deja/g++.pt/static9.C *************** *** 5117,5123 **** 616339966b ./gcc/testsuite/g++.old-deja/g++.pt/unify4.C 1593711084b ./gcc/testsuite/g++.old-deja/g++.pt/unify6.C 2805975955b ./gcc/testsuite/g++.old-deja/g++.pt/unify7.C ! 1108787927b ./gcc/testsuite/g++.old-deja/g++.pt/unify8.C 1740949226b ./gcc/testsuite/g++.old-deja/g++.pt/union1.C 3325944931b ./gcc/testsuite/g++.old-deja/g++.pt/union2.C 3304362700b ./gcc/testsuite/g++.old-deja/g++.pt/using1.C --- 5152,5158 ---- 616339966b ./gcc/testsuite/g++.old-deja/g++.pt/unify4.C 1593711084b ./gcc/testsuite/g++.old-deja/g++.pt/unify6.C 2805975955b ./gcc/testsuite/g++.old-deja/g++.pt/unify7.C ! 572096107b ./gcc/testsuite/g++.old-deja/g++.pt/unify8.C 1740949226b ./gcc/testsuite/g++.old-deja/g++.pt/union1.C 3325944931b ./gcc/testsuite/g++.old-deja/g++.pt/union2.C 3304362700b ./gcc/testsuite/g++.old-deja/g++.pt/using1.C *************** *** 5170,5179 **** 551639476b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129.C 2811911547b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129a.C 630981722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb13.C ! 3833568905b ./gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 2576744469b ./gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 191646019b ./gcc/testsuite/g++.old-deja/g++.robertl/eb132.C ! 1582758441b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133.C 2212505012b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133a.C 960695829b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133b.C 3851013524b ./gcc/testsuite/g++.old-deja/g++.robertl/eb14.C --- 5205,5214 ---- 551639476b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129.C 2811911547b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129a.C 630981722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb13.C ! 4778977b ./gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 2576744469b ./gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 191646019b ./gcc/testsuite/g++.old-deja/g++.robertl/eb132.C ! 960695829b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133.C 2212505012b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133a.C 960695829b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133b.C 3851013524b ./gcc/testsuite/g++.old-deja/g++.robertl/eb14.C *************** *** 5855,5865 **** 2416535943b ./gcc/testsuite/gcc.c-torture/execute/20001203-2.c 315046176b ./gcc/testsuite/gcc.c-torture/execute/20001221-1.c 3430334061b ./gcc/testsuite/gcc.c-torture/execute/20001228-1.c ! 3807533231b ./gcc/testsuite/gcc.c-torture/execute/20001229-1.c 2867964338b ./gcc/testsuite/gcc.c-torture/execute/20010106-1.c 4104575350b ./gcc/testsuite/gcc.c-torture/execute/20010114-1.c - 2602526611b ./gcc/testsuite/gcc.c-torture/execute/20010114-2.c - 3644699221b ./gcc/testsuite/gcc.c-torture/execute/20010114-2.x 4274826155b ./gcc/testsuite/gcc.c-torture/execute/20010116-1.c 1853154998b ./gcc/testsuite/gcc.c-torture/execute/20010118-1.c 1273676691b ./gcc/testsuite/gcc.c-torture/execute/20010119-1.c --- 5890,5898 ---- 2416535943b ./gcc/testsuite/gcc.c-torture/execute/20001203-2.c 315046176b ./gcc/testsuite/gcc.c-torture/execute/20001221-1.c 3430334061b ./gcc/testsuite/gcc.c-torture/execute/20001228-1.c ! 4145547631b ./gcc/testsuite/gcc.c-torture/execute/20001229-1.c 2867964338b ./gcc/testsuite/gcc.c-torture/execute/20010106-1.c 4104575350b ./gcc/testsuite/gcc.c-torture/execute/20010114-1.c 4274826155b ./gcc/testsuite/gcc.c-torture/execute/20010116-1.c 1853154998b ./gcc/testsuite/gcc.c-torture/execute/20010118-1.c 1273676691b ./gcc/testsuite/gcc.c-torture/execute/20010119-1.c *************** *** 5879,5884 **** --- 5912,5919 ---- 3398306936b ./gcc/testsuite/gcc.c-torture/execute/20010604-1.c 1597970944b ./gcc/testsuite/gcc.c-torture/execute/20010605-1.c 2151082111b ./gcc/testsuite/gcc.c-torture/execute/20010605-2.c + 3978892519b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.c + 1723617799b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.x 37158978b ./gcc/testsuite/gcc.c-torture/execute/900409-1.c 1241514475b ./gcc/testsuite/gcc.c-torture/execute/920202-1.c 3659466606b ./gcc/testsuite/gcc.c-torture/execute/920302-1.c *************** *** 6221,6226 **** --- 6256,6262 ---- 1157816092b ./gcc/testsuite/gcc.c-torture/execute/gofast.c 1262906405b ./gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c 981656236b ./gcc/testsuite/gcc.c-torture/execute/ieee/20001122-1.c + 2602526611b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.c 2046772610b ./gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c 3673851898b ./gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c 1813910189b ./gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c *************** *** 6232,6238 **** 634010742b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c 4125344101b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c 1953413990b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x ! 4035620578b ./gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp 4017678214b ./gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c 3545392440b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c 2290856575b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x --- 6268,6274 ---- 634010742b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c 4125344101b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c 1953413990b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x ! 3655953044b ./gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp 4017678214b ./gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c 3545392440b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c 2290856575b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x *************** *** 6657,6662 **** --- 6693,6699 ---- 1646064105b ./gcc/testsuite/gcc.dg/20001228-1.c 2498549558b ./gcc/testsuite/gcc.dg/20010202-1.c 3041407018b ./gcc/testsuite/gcc.dg/20010520-1.c + 3520626317b ./gcc/testsuite/gcc.dg/20010622-1.c 1577979025b ./gcc/testsuite/gcc.dg/920413-1.c 2176221389b ./gcc/testsuite/gcc.dg/940409-1.c 1567764883b ./gcc/testsuite/gcc.dg/940510-1.c *************** *** 6697,6702 **** --- 6734,6740 ---- 2531825241b ./gcc/testsuite/gcc.dg/asm-3.c 1851013323b ./gcc/testsuite/gcc.dg/asm-fs-1.c 2590660240b ./gcc/testsuite/gcc.dg/asm-names.c + 3155000092b ./gcc/testsuite/gcc.dg/bconstp-1.c 15751103b ./gcc/testsuite/gcc.dg/bf-spl1.c 2150146400b ./gcc/testsuite/gcc.dg/c90-array-lval-1.c 3238760819b ./gcc/testsuite/gcc.dg/c90-array-lval-2.c *************** *** 7106,7111 **** --- 7144,7150 ---- 208907585b ./gcc/testsuite/gcc.misc-tests/dhry.h 779830061b ./gcc/testsuite/gcc.misc-tests/gcov-1.c 365927888b ./gcc/testsuite/gcc.misc-tests/gcov-2.c + 4211514085b ./gcc/testsuite/gcc.misc-tests/gcov-3.c 3439242634b ./gcc/testsuite/gcc.misc-tests/gcov.exp 2071381157b ./gcc/testsuite/gcc.misc-tests/linkage-x.c 3975807378b ./gcc/testsuite/gcc.misc-tests/linkage-y.c *************** *** 7115,7121 **** 2874350784b ./gcc/testsuite/gcc.misc-tests/matrix1.c 1686589144b ./gcc/testsuite/gcc.misc-tests/matrix1.exp 1813429392b ./gcc/testsuite/gcc.misc-tests/mg.c ! 978648189b ./gcc/testsuite/gcc.misc-tests/mg.exp 2954737355b ./gcc/testsuite/gcc.misc-tests/msgs.exp 1983153897b ./gcc/testsuite/gcc.misc-tests/sieve.c 3220093576b ./gcc/testsuite/gcc.misc-tests/sieve.exp --- 7154,7160 ---- 2874350784b ./gcc/testsuite/gcc.misc-tests/matrix1.c 1686589144b ./gcc/testsuite/gcc.misc-tests/matrix1.exp 1813429392b ./gcc/testsuite/gcc.misc-tests/mg.c ! 1868251641b ./gcc/testsuite/gcc.misc-tests/mg.exp 2954737355b ./gcc/testsuite/gcc.misc-tests/msgs.exp 1983153897b ./gcc/testsuite/gcc.misc-tests/sieve.c 3220093576b ./gcc/testsuite/gcc.misc-tests/sieve.exp *************** *** 7126,7132 **** 246962046b ./gcc/testsuite/lib/f-torture.exp 1219011657b ./gcc/testsuite/lib/file-format.exp 1898640330b ./gcc/testsuite/lib/g++-dg.exp ! 2693974870b ./gcc/testsuite/lib/g++.exp 3802109199b ./gcc/testsuite/lib/g77-dg.exp 1805589965b ./gcc/testsuite/lib/g77.exp 1223951383b ./gcc/testsuite/lib/gcc-dg.exp --- 7165,7171 ---- 246962046b ./gcc/testsuite/lib/f-torture.exp 1219011657b ./gcc/testsuite/lib/file-format.exp 1898640330b ./gcc/testsuite/lib/g++-dg.exp ! 1264458001b ./gcc/testsuite/lib/g++.exp 3802109199b ./gcc/testsuite/lib/g77-dg.exp 1805589965b ./gcc/testsuite/lib/g77.exp 1223951383b ./gcc/testsuite/lib/gcc-dg.exp *************** *** 7135,7144 **** 3009729864b ./gcc/testsuite/lib/mike-g77.exp 3143525169b ./gcc/testsuite/lib/mike-gcc.exp 3056147734b ./gcc/testsuite/lib/objc-torture.exp ! 1425190810b ./gcc/testsuite/lib/objc.exp 3931030396b ./gcc/testsuite/lib/old-dejagnu.exp 2677371927b ./gcc/testsuite/lib/scanasm.exp ! 3662913186b ./gcc/testsuite/lib/target-supports.exp 2696823090b ./gcc/testsuite/objc/execute/IMP.m 1707819077b ./gcc/testsuite/objc/execute/_cmd.m 3837394038b ./gcc/testsuite/objc/execute/accessing_ivars.m --- 7174,7183 ---- 3009729864b ./gcc/testsuite/lib/mike-g77.exp 3143525169b ./gcc/testsuite/lib/mike-gcc.exp 3056147734b ./gcc/testsuite/lib/objc-torture.exp ! 1365070112b ./gcc/testsuite/lib/objc.exp 3931030396b ./gcc/testsuite/lib/old-dejagnu.exp 2677371927b ./gcc/testsuite/lib/scanasm.exp ! 743118127b ./gcc/testsuite/lib/target-supports.exp 2696823090b ./gcc/testsuite/objc/execute/IMP.m 1707819077b ./gcc/testsuite/objc/execute/_cmd.m 3837394038b ./gcc/testsuite/objc/execute/accessing_ivars.m *************** *** 7206,7211 **** --- 7245,7252 ---- 3845787514b ./gcc/testsuite/objc/execute/no_clash.m 3091877589b ./gcc/testsuite/objc/execute/np-1.m 837055144b ./gcc/testsuite/objc/execute/np-2.m + 936059862b ./gcc/testsuite/objc/execute/object_is_class.m + 1811140144b ./gcc/testsuite/objc/execute/object_is_meta_class.m 3244628587b ./gcc/testsuite/objc/execute/paste.m 3444127895b ./gcc/testsuite/objc/execute/private.m 1487670997b ./gcc/testsuite/objc/execute/protocol.m *************** *** 7223,7259 **** 780535585b ./gcc/timevar.def 3918443491b ./gcc/timevar.h 3255809228b ./gcc/tlink.c ! 2163550922b ./gcc/toplev.c 3421121434b ./gcc/toplev.h ! 3381960764b ./gcc/tradcif.c 2773797431b ./gcc/tradcif.y 3120479866b ./gcc/tradcpp.c 1987124132b ./gcc/tradcpp.h 4149158830b ./gcc/tree.c 2661789638b ./gcc/tree.def ! 4115095299b ./gcc/tree.h 231560538b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h 17641651b ./gcc/unprotoize.c 2728334244b ./gcc/unroll.c ! 3658500135b ./gcc/unwind-dw2-fde.c 2579082273b ./gcc/unwind-dw2-fde.h ! 1513491364b ./gcc/unwind-dw2.c ! 200106548b ./gcc/unwind-pe.h 2658132252b ./gcc/unwind-sjlj.c 1179999985b ./gcc/unwind.h 2811456772b ./gcc/unwind.inc ! 1433501019b ./gcc/varasm.c 740604337b ./gcc/varray.c 3918364708b ./gcc/varray.h ! 3976409631b ./gcc/version.c 1227851131b ./gcc/version.h 1040256635b ./gcc/vmsconfig.com 4121715740b ./gcc/xcoffout.c 2574034949b ./gcc/xcoffout.h ! 1746695871b ./gnats.html 2171125041b ./include/COPYING ! 3584017591b ./include/ChangeLog 888917931b ./include/ansidecl.h 1789350587b ./include/demangle.h 2980645374b ./include/dyn-string.h --- 7264,7300 ---- 780535585b ./gcc/timevar.def 3918443491b ./gcc/timevar.h 3255809228b ./gcc/tlink.c ! 3744765622b ./gcc/toplev.c 3421121434b ./gcc/toplev.h ! 1805793420b ./gcc/tradcif.c 2773797431b ./gcc/tradcif.y 3120479866b ./gcc/tradcpp.c 1987124132b ./gcc/tradcpp.h 4149158830b ./gcc/tree.c 2661789638b ./gcc/tree.def ! 1228630084b ./gcc/tree.h 231560538b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h 17641651b ./gcc/unprotoize.c 2728334244b ./gcc/unroll.c ! 298823486b ./gcc/unwind-dw2-fde.c 2579082273b ./gcc/unwind-dw2-fde.h ! 1325164416b ./gcc/unwind-dw2.c ! 2257776618b ./gcc/unwind-pe.h 2658132252b ./gcc/unwind-sjlj.c 1179999985b ./gcc/unwind.h 2811456772b ./gcc/unwind.inc ! 1308552935b ./gcc/varasm.c 740604337b ./gcc/varray.c 3918364708b ./gcc/varray.h ! 1173990918b ./gcc/version.c 1227851131b ./gcc/version.h 1040256635b ./gcc/vmsconfig.com 4121715740b ./gcc/xcoffout.c 2574034949b ./gcc/xcoffout.h ! 3788021337b ./gnats.html 2171125041b ./include/COPYING ! 4266871069b ./include/ChangeLog 888917931b ./include/ansidecl.h 1789350587b ./include/demangle.h 2980645374b ./include/dyn-string.h *************** *** 7271,7277 **** 176339077b ./include/splay-tree.h 1653599470b ./include/symcat.h 4171599065b ./install-sh ! 382002726b ./libf2c/ChangeLog 57434001b ./libf2c/Makefile.in 3111321221b ./libf2c/README 308226469b ./libf2c/TODO --- 7312,7318 ---- 176339077b ./include/splay-tree.h 1653599470b ./include/symcat.h 4171599065b ./install-sh ! 2735711540b ./libf2c/ChangeLog 57434001b ./libf2c/Makefile.in 3111321221b ./libf2c/README 308226469b ./libf2c/TODO *************** *** 7286,7292 **** 1147257543b ./libf2c/libF77/Makefile.in 1384146782b ./libf2c/libF77/Notice 3594711912b ./libf2c/libF77/README.netlib ! 3899292545b ./libf2c/libF77/Version.c 1304659322b ./libf2c/libF77/abort_.c 2143735092b ./libf2c/libF77/c_abs.c 4102372920b ./libf2c/libF77/c_cos.c --- 7327,7333 ---- 1147257543b ./libf2c/libF77/Makefile.in 1384146782b ./libf2c/libF77/Notice 3594711912b ./libf2c/libF77/README.netlib ! 4287439991b ./libf2c/libF77/Version.c 1304659322b ./libf2c/libF77/abort_.c 2143735092b ./libf2c/libF77/c_abs.c 4102372920b ./libf2c/libF77/c_cos.c *************** *** 7418,7424 **** 999500799b ./libf2c/libI77/Makefile.in 1384146782b ./libf2c/libI77/Notice 3744878144b ./libf2c/libI77/README.netlib ! 2411890295b ./libf2c/libI77/Version.c 1131505415b ./libf2c/libI77/backspace.c 2398093876b ./libf2c/libI77/close.c 3931934799b ./libf2c/libI77/config.h.in --- 7459,7465 ---- 999500799b ./libf2c/libI77/Makefile.in 1384146782b ./libf2c/libI77/Notice 3744878144b ./libf2c/libI77/README.netlib ! 303392302b ./libf2c/libI77/Version.c 1131505415b ./libf2c/libI77/backspace.c 2398093876b ./libf2c/libI77/close.c 3931934799b ./libf2c/libI77/config.h.in *************** *** 7466,7472 **** 2966234338b ./libf2c/libU77/Makefile.in 572996563b ./libf2c/libU77/PROJECTS 2980229902b ./libf2c/libU77/README ! 4288942149b ./libf2c/libU77/Version.c 1842933802b ./libf2c/libU77/access_.c 4214861580b ./libf2c/libU77/acconfig.h 2301261828b ./libf2c/libU77/aclocal.m4 --- 7507,7513 ---- 2966234338b ./libf2c/libU77/Makefile.in 572996563b ./libf2c/libU77/PROJECTS 2980229902b ./libf2c/libU77/README ! 1033325637b ./libf2c/libU77/Version.c 1842933802b ./libf2c/libU77/access_.c 4214861580b ./libf2c/libU77/acconfig.h 2301261828b ./libf2c/libU77/aclocal.m4 *************** *** 7528,7534 **** 3987376609b ./libf2c/libU77/vxttime_.c 1384146782b ./libf2c/permission.netlib 3513813969b ./libf2c/readme.netlib ! 1109274161b ./libffi/ChangeLog 2412263940b ./libffi/ChangeLog.libgcj 1481682558b ./libffi/ChangeLog.v1 2593181117b ./libffi/LICENSE --- 7569,7575 ---- 3987376609b ./libf2c/libU77/vxttime_.c 1384146782b ./libf2c/permission.netlib 3513813969b ./libf2c/readme.netlib ! 1599344309b ./libffi/ChangeLog 2412263940b ./libffi/ChangeLog.libgcj 1481682558b ./libffi/ChangeLog.v1 2593181117b ./libffi/LICENSE *************** *** 7538,7553 **** 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 3541235691b ./libffi/aclocal.m4 ! 556251580b ./libffi/configure ! 2167678845b ./libffi/configure.in 2955525038b ./libffi/fficonfig.h.in 1175058075b ./libffi/include/Makefile.am 1670240125b ./libffi/include/Makefile.in 3520784265b ./libffi/include/ffi.h.in 3309556484b ./libffi/include/ffi_common.h 1647998382b ./libffi/include/ffi_mips.h ! 71498694b ./libffi/src/alpha/ffi.c ! 2767781122b ./libffi/src/alpha/osf.S 1858437870b ./libffi/src/arm/ffi.c 3794061997b ./libffi/src/arm/sysv.S 2383098329b ./libffi/src/debug.c --- 7579,7594 ---- 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 3541235691b ./libffi/aclocal.m4 ! 1421737416b ./libffi/configure ! 2560983985b ./libffi/configure.in 2955525038b ./libffi/fficonfig.h.in 1175058075b ./libffi/include/Makefile.am 1670240125b ./libffi/include/Makefile.in 3520784265b ./libffi/include/ffi.h.in 3309556484b ./libffi/include/ffi_common.h 1647998382b ./libffi/include/ffi_mips.h ! 931496280b ./libffi/src/alpha/ffi.c ! 2032396460b ./libffi/src/alpha/osf.S 1858437870b ./libffi/src/arm/ffi.c 3794061997b ./libffi/src/arm/sysv.S 2383098329b ./libffi/src/debug.c *************** *** 7574,7584 **** 1736720411b ./libffi/src/sparc/v9.S 1207476889b ./libffi/src/types.c 1855580175b ./libffi/src/x86/ffi.c ! 3448680767b ./libffi/src/x86/sysv.S 4026965770b ./libffi/src/x86/win32.S 216805921b ./libffi/stamp-h.in 508743035b ./libiberty/COPYING.LIB ! 1961261613b ./libiberty/ChangeLog 1950042116b ./libiberty/Makefile.in 4016047250b ./libiberty/README 4152189310b ./libiberty/aclocal.m4 --- 7615,7625 ---- 1736720411b ./libffi/src/sparc/v9.S 1207476889b ./libffi/src/types.c 1855580175b ./libffi/src/x86/ffi.c ! 1417743400b ./libffi/src/x86/sysv.S 4026965770b ./libffi/src/x86/win32.S 216805921b ./libffi/stamp-h.in 508743035b ./libiberty/COPYING.LIB ! 1214041342b ./libiberty/ChangeLog 1950042116b ./libiberty/Makefile.in 4016047250b ./libiberty/README 4152189310b ./libiberty/aclocal.m4 *************** *** 7681,7708 **** 3859667112b ./libiberty/xstrdup.c 2509140929b ./libiberty/xstrerror.c 2171125041b ./libjava/COPYING ! 1986976820b ./libjava/ChangeLog 3473562392b ./libjava/ChangeLog-1999 2906142423b ./libjava/LIBGCJ_LICENSE ! 798608040b ./libjava/Makefile.am ! 3822452764b ./libjava/Makefile.in 4049677327b ./libjava/NEWS 3199155412b ./libjava/README 1242996640b ./libjava/THANKS ! 1129373528b ./libjava/acconfig.h ! 2518065128b ./libjava/acinclude.m4 ! 2355017630b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk 608342622b ./libjava/boehm.cc 1179658282b ./libjava/chartables.pl ! 3630731276b ./libjava/configure 3242339555b ./libjava/configure.host ! 1747363619b ./libjava/configure.in 3942405165b ./libjava/defineclass.cc 535801509b ./libjava/doc/cni.sgml 1132558953b ./libjava/exception.cc 2155926294b ./libjava/gcj/Makefile.am ! 3802650555b ./libjava/gcj/Makefile.in 3591403769b ./libjava/gcj/array.h 341624408b ./libjava/gcj/cni.h 227606957b ./libjava/gcj/field.h --- 7722,7750 ---- 3859667112b ./libiberty/xstrdup.c 2509140929b ./libiberty/xstrerror.c 2171125041b ./libjava/COPYING ! 3405806640b ./libjava/ChangeLog 3473562392b ./libjava/ChangeLog-1999 + 3913589198b ./libjava/HACKING 2906142423b ./libjava/LIBGCJ_LICENSE ! 1368636295b ./libjava/Makefile.am ! 2256360485b ./libjava/Makefile.in 4049677327b ./libjava/NEWS 3199155412b ./libjava/README 1242996640b ./libjava/THANKS ! 4020104846b ./libjava/acconfig.h ! 2834260208b ./libjava/acinclude.m4 ! 1842823374b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk 608342622b ./libjava/boehm.cc 1179658282b ./libjava/chartables.pl ! 4248440651b ./libjava/configure 3242339555b ./libjava/configure.host ! 2518793201b ./libjava/configure.in 3942405165b ./libjava/defineclass.cc 535801509b ./libjava/doc/cni.sgml 1132558953b ./libjava/exception.cc 2155926294b ./libjava/gcj/Makefile.am ! 991572967b ./libjava/gcj/Makefile.in 3591403769b ./libjava/gcj/array.h 341624408b ./libjava/gcj/cni.h 227606957b ./libjava/gcj/field.h *************** *** 7797,7803 **** 501773112b ./libjava/gnu/gcj/runtime/FileDeleter.java 3433902184b ./libjava/gnu/gcj/runtime/FirstThread.java 2884015653b ./libjava/gnu/gcj/runtime/VMClassLoader.java ! 2923267429b ./libjava/gnu/gcj/runtime/natFirstThread.cc 1287370049b ./libjava/gnu/gcj/text/BaseBreakIterator.java 3670914440b ./libjava/gnu/gcj/text/CharacterBreakIterator.java 1463280546b ./libjava/gnu/gcj/text/LineBreakIterator.java --- 7839,7845 ---- 501773112b ./libjava/gnu/gcj/runtime/FileDeleter.java 3433902184b ./libjava/gnu/gcj/runtime/FirstThread.java 2884015653b ./libjava/gnu/gcj/runtime/VMClassLoader.java ! 784657895b ./libjava/gnu/gcj/runtime/natFirstThread.cc 1287370049b ./libjava/gnu/gcj/text/BaseBreakIterator.java 3670914440b ./libjava/gnu/gcj/text/CharacterBreakIterator.java 1463280546b ./libjava/gnu/gcj/text/LineBreakIterator.java *************** *** 7878,7886 **** 61780098b ./libjava/gnu/java/security/provider/SHA.java 1906234033b ./libjava/gnu/java/security/provider/SHA1PRNG.java 2049405362b ./libjava/include/Makefile.am ! 161896176b ./libjava/include/Makefile.in 332977143b ./libjava/include/boehm-gc.h ! 1397687863b ./libjava/include/config.h.in 1108817619b ./libjava/include/default-signal.h 1148242917b ./libjava/include/dwarf2-signal.h 598122022b ./libjava/include/i386-signal.h --- 7920,7928 ---- 61780098b ./libjava/gnu/java/security/provider/SHA.java 1906234033b ./libjava/gnu/java/security/provider/SHA1PRNG.java 2049405362b ./libjava/include/Makefile.am ! 2120312729b ./libjava/include/Makefile.in 332977143b ./libjava/include/boehm-gc.h ! 287131728b ./libjava/include/config.h.in 1108817619b ./libjava/include/default-signal.h 1148242917b ./libjava/include/dwarf2-signal.h 598122022b ./libjava/include/i386-signal.h *************** *** 7898,7904 **** 528567171b ./libjava/include/no-gc.h 1417677646b ./libjava/include/no-threads.h 2127673017b ./libjava/include/posix-threads.h ! 1920034113b ./libjava/include/posix.h 2366673227b ./libjava/include/sparc-signal.h 216805921b ./libjava/include/stamp-h.in 2649356437b ./libjava/include/win32-signal.h --- 7940,7946 ---- 528567171b ./libjava/include/no-gc.h 1417677646b ./libjava/include/no-threads.h 2127673017b ./libjava/include/posix-threads.h ! 857399060b ./libjava/include/posix.h 2366673227b ./libjava/include/sparc-signal.h 216805921b ./libjava/include/stamp-h.in 2649356437b ./libjava/include/win32-signal.h *************** *** 8126,8132 **** 1792031297b ./libjava/java/io/DataOutputStream.java 4260863877b ./libjava/java/io/EOFException.java 3970357142b ./libjava/java/io/Externalizable.java ! 986948296b ./libjava/java/io/File.java 2504863172b ./libjava/java/io/FileDescriptor.java 4114330107b ./libjava/java/io/FileFilter.java 1347883250b ./libjava/java/io/FileInputStream.java --- 8168,8174 ---- 1792031297b ./libjava/java/io/DataOutputStream.java 4260863877b ./libjava/java/io/EOFException.java 3970357142b ./libjava/java/io/Externalizable.java ! 1700842754b ./libjava/java/io/File.java 2504863172b ./libjava/java/io/FileDescriptor.java 4114330107b ./libjava/java/io/FileFilter.java 1347883250b ./libjava/java/io/FileInputStream.java *************** *** 8185,8195 **** 3277438941b ./libjava/java/io/UnsupportedEncodingException.java 2331138641b ./libjava/java/io/WriteAbortedException.java 3305767237b ./libjava/java/io/Writer.java ! 2370234731b ./libjava/java/io/natFile.cc 1562521391b ./libjava/java/io/natFileDescriptorEcos.cc 2196097286b ./libjava/java/io/natFileDescriptorPosix.cc 3769648083b ./libjava/java/io/natFileDescriptorWin32.cc ! 3617706040b ./libjava/java/io/natFileWin32.cc 1248276847b ./libjava/java/io/natObjectInputStream.cc 4239505089b ./libjava/java/io/natObjectOutputStream.cc 1817734720b ./libjava/java/lang/AbstractMethodError.java --- 8227,8237 ---- 3277438941b ./libjava/java/io/UnsupportedEncodingException.java 2331138641b ./libjava/java/io/WriteAbortedException.java 3305767237b ./libjava/java/io/Writer.java ! 1332507382b ./libjava/java/io/natFile.cc 1562521391b ./libjava/java/io/natFileDescriptorEcos.cc 2196097286b ./libjava/java/io/natFileDescriptorPosix.cc 3769648083b ./libjava/java/io/natFileDescriptorWin32.cc ! 276931083b ./libjava/java/io/natFileWin32.cc 1248276847b ./libjava/java/io/natObjectInputStream.cc 4239505089b ./libjava/java/io/natObjectOutputStream.cc 1817734720b ./libjava/java/lang/AbstractMethodError.java *************** *** 8199,8205 **** 1949184473b ./libjava/java/lang/Boolean.java 3912602300b ./libjava/java/lang/Byte.java 1799924505b ./libjava/java/lang/Character.java ! 4176519023b ./libjava/java/lang/Class.h 2393404172b ./libjava/java/lang/Class.java 2465177804b ./libjava/java/lang/ClassCastException.java 522355456b ./libjava/java/lang/ClassCircularityError.java --- 8241,8247 ---- 1949184473b ./libjava/java/lang/Boolean.java 3912602300b ./libjava/java/lang/Byte.java 1799924505b ./libjava/java/lang/Character.java ! 1295012839b ./libjava/java/lang/Class.h 2393404172b ./libjava/java/lang/Class.java 2465177804b ./libjava/java/lang/ClassCastException.java 522355456b ./libjava/java/lang/ClassCircularityError.java *************** *** 8289,8295 **** 4037044768b ./libjava/java/lang/mprec.c 338852744b ./libjava/java/lang/mprec.h 1038271037b ./libjava/java/lang/natCharacter.cc ! 667115457b ./libjava/java/lang/natClass.cc 397542309b ./libjava/java/lang/natClassLoader.cc 299573242b ./libjava/java/lang/natDouble.cc 2312870767b ./libjava/java/lang/natEcosProcess.cc --- 8331,8337 ---- 4037044768b ./libjava/java/lang/mprec.c 338852744b ./libjava/java/lang/mprec.h 1038271037b ./libjava/java/lang/natCharacter.cc ! 1374869131b ./libjava/java/lang/natClass.cc 397542309b ./libjava/java/lang/natClassLoader.cc 299573242b ./libjava/java/lang/natDouble.cc 2312870767b ./libjava/java/lang/natEcosProcess.cc *************** *** 8377,8384 **** 4281924200b ./libjava/java/net/UnknownHostException.java 11968751b ./libjava/java/net/UnknownServiceException.java 1699982728b ./libjava/java/net/natInetAddress.cc ! 1852472560b ./libjava/java/net/natPlainDatagramSocketImpl.cc ! 197097593b ./libjava/java/net/natPlainSocketImpl.cc 993185288b ./libjava/java/security/AlgorithmParameterGeneratorSpi.java 228936680b ./libjava/java/security/BasicPermission.java 1209135215b ./libjava/java/security/DigestException.java --- 8419,8426 ---- 4281924200b ./libjava/java/net/UnknownHostException.java 11968751b ./libjava/java/net/UnknownServiceException.java 1699982728b ./libjava/java/net/natInetAddress.cc ! 2413567714b ./libjava/java/net/natPlainDatagramSocketImpl.cc ! 2428724788b ./libjava/java/net/natPlainSocketImpl.cc 993185288b ./libjava/java/security/AlgorithmParameterGeneratorSpi.java 228936680b ./libjava/java/security/BasicPermission.java 1209135215b ./libjava/java/security/DigestException.java *************** *** 8617,8636 **** 562080873b ./libjava/javax/naming/spi/ObjectFactory.java 1556519848b ./libjava/jni.cc 3263845190b ./libjava/libgcj-test.spec.in ! 2451640161b ./libjava/libgcj.spec.in 3693275905b ./libjava/libgcjdata.c 1996902805b ./libjava/libltdl/.cvsignore 1530919786b ./libjava/libltdl/COPYING.LIB ! 2158240030b ./libjava/libltdl/ChangeLog 3589765398b ./libjava/libltdl/Makefile.am ! 252857433b ./libjava/libltdl/Makefile.in 1322928877b ./libjava/libltdl/README 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 3229611250b ./libjava/libltdl/config.h.in ! 271069647b ./libjava/libltdl/configure ! 3115330048b ./libjava/libltdl/configure.in 1708336280b ./libjava/libltdl/ltdl.c 3122579166b ./libjava/libltdl/ltdl.h 216805921b ./libjava/libltdl/stamp-h.in --- 8659,8678 ---- 562080873b ./libjava/javax/naming/spi/ObjectFactory.java 1556519848b ./libjava/jni.cc 3263845190b ./libjava/libgcj-test.spec.in ! 1618850334b ./libjava/libgcj.spec.in 3693275905b ./libjava/libgcjdata.c 1996902805b ./libjava/libltdl/.cvsignore 1530919786b ./libjava/libltdl/COPYING.LIB ! 2940277496b ./libjava/libltdl/ChangeLog 3589765398b ./libjava/libltdl/Makefile.am ! 2495909158b ./libjava/libltdl/Makefile.in 1322928877b ./libjava/libltdl/README 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 3229611250b ./libjava/libltdl/config.h.in ! 1181542053b ./libjava/libltdl/configure ! 2859679520b ./libjava/libltdl/configure.in 1708336280b ./libjava/libltdl/ltdl.c 3122579166b ./libjava/libltdl/ltdl.h 216805921b ./libjava/libltdl/stamp-h.in *************** *** 8652,8662 **** 1359447378b ./libjava/scripts/showval.java 3969226176b ./libjava/sysdep/ia64-frame.h 4255020929b ./libjava/sysdep/ia64.c ! 2112666024b ./libjava/testsuite/ChangeLog 3806425466b ./libjava/testsuite/Makefile.am ! 1636438977b ./libjava/testsuite/Makefile.in 1230501773b ./libjava/testsuite/config/default.exp ! 1540994779b ./libjava/testsuite/lib/libjava.exp 2597392402b ./libjava/testsuite/libjava.compile/ArrayClass.java 2529689226b ./libjava/testsuite/libjava.compile/BlankFinal.java 2001362839b ./libjava/testsuite/libjava.compile/Case.java --- 8694,8704 ---- 1359447378b ./libjava/scripts/showval.java 3969226176b ./libjava/sysdep/ia64-frame.h 4255020929b ./libjava/sysdep/ia64.c ! 3850398201b ./libjava/testsuite/ChangeLog 3806425466b ./libjava/testsuite/Makefile.am ! 1253427395b ./libjava/testsuite/Makefile.in 1230501773b ./libjava/testsuite/config/default.exp ! 147133276b ./libjava/testsuite/lib/libjava.exp 2597392402b ./libjava/testsuite/libjava.compile/ArrayClass.java 2529689226b ./libjava/testsuite/libjava.compile/BlankFinal.java 2001362839b ./libjava/testsuite/libjava.compile/Case.java *************** *** 9011,9017 **** 1032868016b ./libjava/testsuite/libjava.mauve/mauve.exp 168151904b ./libjava/testsuite/libjava.mauve/xfails 1531406287b ./libjava/win32-threads.cc ! 3770327569b ./libobjc/ChangeLog 3802413505b ./libobjc/Makefile.in 638422313b ./libobjc/NXConstStr.m 3285287551b ./libobjc/Object.m --- 9053,9059 ---- 1032868016b ./libjava/testsuite/libjava.mauve/mauve.exp 168151904b ./libjava/testsuite/libjava.mauve/xfails 1531406287b ./libjava/win32-threads.cc ! 866224902b ./libobjc/ChangeLog 3802413505b ./libobjc/Makefile.in 638422313b ./libobjc/NXConstStr.m 3285287551b ./libobjc/Object.m *************** *** 9041,9047 **** 226797930b ./libobjc/objc/Protocol.h 1692177559b ./libobjc/objc/encoding.h 597415090b ./libobjc/objc/hash.h ! 3864355605b ./libobjc/objc/objc-api.h 1569406371b ./libobjc/objc/objc-list.h 2946018502b ./libobjc/objc/objc.h 1775267864b ./libobjc/objc/runtime.h --- 9083,9089 ---- 226797930b ./libobjc/objc/Protocol.h 1692177559b ./libobjc/objc/encoding.h 597415090b ./libobjc/objc/hash.h ! 4211776544b ./libobjc/objc/objc-api.h 1569406371b ./libobjc/objc/objc-list.h 2946018502b ./libobjc/objc/objc.h 1775267864b ./libobjc/objc/runtime.h *************** *** 9066,9080 **** 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c 1509327042b ./libobjc/thr.c ! 3772525642b ./libstdc++-v3/ChangeLog 4193951875b ./libstdc++-v3/ChangeLog-2000 ! 738501771b ./libstdc++-v3/Makefile.am ! 2567578804b ./libstdc++-v3/Makefile.in 476340085b ./libstdc++-v3/README 3623435792b ./libstdc++-v3/acconfig.h ! 2034395934b ./libstdc++-v3/acinclude.m4 ! 3101871203b ./libstdc++-v3/aclocal.m4 ! 3586730381b ./libstdc++-v3/config.h.in 1453199454b ./libstdc++-v3/config/basic_file_libio.cc 440650960b ./libstdc++-v3/config/basic_file_libio.h 3327448769b ./libstdc++-v3/config/basic_file_stdio.cc --- 9108,9122 ---- 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c 1509327042b ./libobjc/thr.c ! 427182117b ./libstdc++-v3/ChangeLog 4193951875b ./libstdc++-v3/ChangeLog-2000 ! 2983129040b ./libstdc++-v3/Makefile.am ! 188555504b ./libstdc++-v3/Makefile.in 476340085b ./libstdc++-v3/README 3623435792b ./libstdc++-v3/acconfig.h ! 2868158659b ./libstdc++-v3/acinclude.m4 ! 2329293138b ./libstdc++-v3/aclocal.m4 ! 1314486850b ./libstdc++-v3/config.h.in 1453199454b ./libstdc++-v3/config/basic_file_libio.cc 440650960b ./libstdc++-v3/config/basic_file_libio.h 3327448769b ./libstdc++-v3/config/basic_file_stdio.cc *************** *** 9089,9105 **** 2418599665b ./libstdc++-v3/config/cpu/alpha/bits/atomicity.h 337654572b ./libstdc++-v3/config/cpu/arm/bits/atomicity.h 4265367019b ./libstdc++-v3/config/cpu/generic/bits/atomicity.h 2485610863b ./libstdc++-v3/config/cpu/i386/bits/atomicity.h 2887076979b ./libstdc++-v3/config/cpu/i486/bits/atomicity.h 3880622031b ./libstdc++-v3/config/cpu/ia64/bits/atomicity.h 632361011b ./libstdc++-v3/config/cpu/powerpc/bits/atomicity.h 2909203810b ./libstdc++-v3/config/cpu/sparc/sparc32/bits/atomicity.h 2358797811b ./libstdc++-v3/config/cpu/sparc/sparc64/bits/atomicity.h 4256387970b ./libstdc++-v3/config/os/aix/bits/atomicity.h 2669974896b ./libstdc++-v3/config/os/aix/bits/ctype_base.h 3165823414b ./libstdc++-v3/config/os/aix/bits/ctype_inline.h 2776462375b ./libstdc++-v3/config/os/aix/bits/ctype_noninline.h ! 1023268488b ./libstdc++-v3/config/os/aix/bits/os_defines.h 537966674b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_base.h 2331573625b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h 3790282654b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_noninline.h --- 9131,9153 ---- 2418599665b ./libstdc++-v3/config/cpu/alpha/bits/atomicity.h 337654572b ./libstdc++-v3/config/cpu/arm/bits/atomicity.h 4265367019b ./libstdc++-v3/config/cpu/generic/bits/atomicity.h + 1670735336b ./libstdc++-v3/config/cpu/generic/bits/limits.h 2485610863b ./libstdc++-v3/config/cpu/i386/bits/atomicity.h + 593957722b ./libstdc++-v3/config/cpu/i386/bits/limits.h 2887076979b ./libstdc++-v3/config/cpu/i486/bits/atomicity.h 3880622031b ./libstdc++-v3/config/cpu/ia64/bits/atomicity.h + 2211053124b ./libstdc++-v3/config/cpu/m68k/bits/atomicity.h + 4192061837b ./libstdc++-v3/config/cpu/mips/bits/atomicity.h 632361011b ./libstdc++-v3/config/cpu/powerpc/bits/atomicity.h + 2029688870b ./libstdc++-v3/config/cpu/powerpc/bits/limits.h + 3930061484b ./libstdc++-v3/config/cpu/s390/bits/atomicity.h 2909203810b ./libstdc++-v3/config/cpu/sparc/sparc32/bits/atomicity.h 2358797811b ./libstdc++-v3/config/cpu/sparc/sparc64/bits/atomicity.h 4256387970b ./libstdc++-v3/config/os/aix/bits/atomicity.h 2669974896b ./libstdc++-v3/config/os/aix/bits/ctype_base.h 3165823414b ./libstdc++-v3/config/os/aix/bits/ctype_inline.h 2776462375b ./libstdc++-v3/config/os/aix/bits/ctype_noninline.h ! 2686194341b ./libstdc++-v3/config/os/aix/bits/os_defines.h 537966674b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_base.h 2331573625b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h 3790282654b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_noninline.h *************** *** 9115,9129 **** 297286676b ./libstdc++-v3/config/os/generic/bits/ctype_base.h 3751997700b ./libstdc++-v3/config/os/generic/bits/ctype_inline.h 1959980985b ./libstdc++-v3/config/os/generic/bits/ctype_noninline.h ! 3217385665b ./libstdc++-v3/config/os/generic/bits/os_defines.h 1667394230b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_base.h 172209115b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_inline.h 2769914139b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h ! 512938248b ./libstdc++-v3/config/os/gnu-linux/bits/os_defines.h 2680166297b ./libstdc++-v3/config/os/hpux/bits/ctype_base.h 521899911b ./libstdc++-v3/config/os/hpux/bits/ctype_inline.h 1959980985b ./libstdc++-v3/config/os/hpux/bits/ctype_noninline.h ! 3270370488b ./libstdc++-v3/config/os/hpux/bits/os_defines.h 805235121b ./libstdc++-v3/config/os/irix/irix5.2/bits/atomicity.h 734403019b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_base.h 3968534641b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_inline.h --- 9163,9177 ---- 297286676b ./libstdc++-v3/config/os/generic/bits/ctype_base.h 3751997700b ./libstdc++-v3/config/os/generic/bits/ctype_inline.h 1959980985b ./libstdc++-v3/config/os/generic/bits/ctype_noninline.h ! 242441459b ./libstdc++-v3/config/os/generic/bits/os_defines.h 1667394230b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_base.h 172209115b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_inline.h 2769914139b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h ! 2434064470b ./libstdc++-v3/config/os/gnu-linux/bits/os_defines.h 2680166297b ./libstdc++-v3/config/os/hpux/bits/ctype_base.h 521899911b ./libstdc++-v3/config/os/hpux/bits/ctype_inline.h 1959980985b ./libstdc++-v3/config/os/hpux/bits/ctype_noninline.h ! 2177574233b ./libstdc++-v3/config/os/hpux/bits/os_defines.h 805235121b ./libstdc++-v3/config/os/irix/irix5.2/bits/atomicity.h 734403019b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_base.h 3968534641b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_inline.h *************** *** 9133,9139 **** 1682275129b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_base.h 363484342b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_inline.h 257232326b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_noninline.h ! 1674913545b ./libstdc++-v3/config/os/irix/irix6.5/bits/os_defines.h 1435551091b ./libstdc++-v3/config/os/newlib/bits/ctype_base.h 3131508399b ./libstdc++-v3/config/os/newlib/bits/ctype_inline.h 456723072b ./libstdc++-v3/config/os/newlib/bits/ctype_noninline.h --- 9181,9187 ---- 1682275129b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_base.h 363484342b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_inline.h 257232326b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_noninline.h ! 3096266225b ./libstdc++-v3/config/os/irix/irix6.5/bits/os_defines.h 1435551091b ./libstdc++-v3/config/os/newlib/bits/ctype_base.h 3131508399b ./libstdc++-v3/config/os/newlib/bits/ctype_inline.h 456723072b ./libstdc++-v3/config/os/newlib/bits/ctype_noninline.h *************** *** 9149,9164 **** 2023078243b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_base.h 3980190828b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_inline.h 1735304697b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_noninline.h ! 1130388555b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/os_defines.h ! 4214370852b ./libstdc++-v3/configure 3116040814b ./libstdc++-v3/configure.host ! 3178961924b ./libstdc++-v3/configure.in ! 2270895925b ./libstdc++-v3/configure.target 4163616924b ./libstdc++-v3/docs/doxygen/mainpage.doxy 225771389b ./libstdc++-v3/docs/doxygen/maint.cfg.in ! 3618720064b ./libstdc++-v3/docs/doxygen/run_doxygen 863086283b ./libstdc++-v3/docs/doxygen/style.css ! 4200851398b ./libstdc++-v3/docs/doxygen/user.cfg.in 4001239912b ./libstdc++-v3/docs/html/17_intro/BADNAMES 1897516117b ./libstdc++-v3/docs/html/17_intro/BUGS 1994659480b ./libstdc++-v3/docs/html/17_intro/C++STYLE --- 9197,9212 ---- 2023078243b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_base.h 3980190828b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_inline.h 1735304697b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_noninline.h ! 186536916b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/os_defines.h ! 3525118264b ./libstdc++-v3/configure 3116040814b ./libstdc++-v3/configure.host ! 3995946368b ./libstdc++-v3/configure.in ! 3653801858b ./libstdc++-v3/configure.target 4163616924b ./libstdc++-v3/docs/doxygen/mainpage.doxy 225771389b ./libstdc++-v3/docs/doxygen/maint.cfg.in ! 2208204477b ./libstdc++-v3/docs/doxygen/run_doxygen 863086283b ./libstdc++-v3/docs/doxygen/style.css ! 404838806b ./libstdc++-v3/docs/doxygen/user.cfg.in 4001239912b ./libstdc++-v3/docs/html/17_intro/BADNAMES 1897516117b ./libstdc++-v3/docs/html/17_intro/BUGS 1994659480b ./libstdc++-v3/docs/html/17_intro/C++STYLE *************** *** 9175,9181 **** 3580331685b ./libstdc++-v3/docs/html/17_intro/howto.html 3565645043b ./libstdc++-v3/docs/html/17_intro/libstdc++-assign.txt 982764901b ./libstdc++-v3/docs/html/17_intro/organization ! 1318998220b ./libstdc++-v3/docs/html/17_intro/porting-howto.html 760129033b ./libstdc++-v3/docs/html/18_support/howto.html 3928858592b ./libstdc++-v3/docs/html/19_diagnostics/howto.html 839083338b ./libstdc++-v3/docs/html/20_util/howto.html --- 9223,9230 ---- 3580331685b ./libstdc++-v3/docs/html/17_intro/howto.html 3565645043b ./libstdc++-v3/docs/html/17_intro/libstdc++-assign.txt 982764901b ./libstdc++-v3/docs/html/17_intro/organization ! 1278915005b ./libstdc++-v3/docs/html/17_intro/porting-howto.html ! 3336170739b ./libstdc++-v3/docs/html/17_intro/porting-howto.xml 760129033b ./libstdc++-v3/docs/html/18_support/howto.html 3928858592b ./libstdc++-v3/docs/html/19_diagnostics/howto.html 839083338b ./libstdc++-v3/docs/html/20_util/howto.html *************** *** 9194,9343 **** 1991083162b ./libstdc++-v3/docs/html/26_numerics/howto.html 2452165260b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kanze.txt 3249620502b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kuehl.txt ! 4018695368b ./libstdc++-v3/docs/html/27_io/howto.html 1631173890b ./libstdc++-v3/docs/html/Makefile ! 105004799b ./libstdc++-v3/docs/html/configopts.html 658418595b ./libstdc++-v3/docs/html/documentation.html 1651767880b ./libstdc++-v3/docs/html/ext/howto.html ! 2876047722b ./libstdc++-v3/docs/html/faq/index.html ! 3973418697b ./libstdc++-v3/docs/html/faq/index.txt 122913300b ./libstdc++-v3/docs/html/install.html 2049389478b ./libstdc++-v3/docs/html/lib3styles.css ! 3214372194b ./libstdc++-v3/include/backward/algo.h ! 2295181794b ./libstdc++-v3/include/backward/algobase.h ! 1823418083b ./libstdc++-v3/include/backward/alloc.h 3605066841b ./libstdc++-v3/include/backward/backward_warning.h ! 2795227960b ./libstdc++-v3/include/backward/bvector.h 3947901111b ./libstdc++-v3/include/backward/complex.h ! 2212442834b ./libstdc++-v3/include/backward/defalloc.h ! 672925201b ./libstdc++-v3/include/backward/deque.h 2323541526b ./libstdc++-v3/include/backward/fstream.h ! 1675220275b ./libstdc++-v3/include/backward/function.h ! 4229558428b ./libstdc++-v3/include/backward/hash_map.h ! 661625748b ./libstdc++-v3/include/backward/hash_set.h ! 1711043863b ./libstdc++-v3/include/backward/hashtable.h ! 202581693b ./libstdc++-v3/include/backward/heap.h 2989618329b ./libstdc++-v3/include/backward/iomanip.h 1747716150b ./libstdc++-v3/include/backward/iostream.h 1766778751b ./libstdc++-v3/include/backward/istream.h ! 2742254592b ./libstdc++-v3/include/backward/iterator.h ! 2453167247b ./libstdc++-v3/include/backward/list.h ! 3955550623b ./libstdc++-v3/include/backward/map.h ! 2495688261b ./libstdc++-v3/include/backward/multimap.h ! 2384707565b ./libstdc++-v3/include/backward/multiset.h 1959434229b ./libstdc++-v3/include/backward/new.h 3127480935b ./libstdc++-v3/include/backward/ostream.h ! 2479630664b ./libstdc++-v3/include/backward/pair.h 800595743b ./libstdc++-v3/include/backward/queue.h ! 1681437914b ./libstdc++-v3/include/backward/rope.h ! 208858773b ./libstdc++-v3/include/backward/set.h ! 2879855659b ./libstdc++-v3/include/backward/slist.h ! 2262649092b ./libstdc++-v3/include/backward/stack.h 2367779603b ./libstdc++-v3/include/backward/stream.h 3194664680b ./libstdc++-v3/include/backward/streambuf.h ! 4280906497b ./libstdc++-v3/include/backward/strstream 3139222786b ./libstdc++-v3/include/backward/strstream.h ! 2614951447b ./libstdc++-v3/include/backward/tempbuf.h ! 3440572544b ./libstdc++-v3/include/backward/tree.h ! 2342854974b ./libstdc++-v3/include/backward/vector.h 4248267406b ./libstdc++-v3/include/bits/basic_file.h 2964830866b ./libstdc++-v3/include/bits/basic_ios.h 2254012334b ./libstdc++-v3/include/bits/basic_ios.tcc ! 3718531203b ./libstdc++-v3/include/bits/basic_string.h ! 1657117454b ./libstdc++-v3/include/bits/basic_string.tcc 1664028266b ./libstdc++-v3/include/bits/boost_concept_check.h ! 3120336262b ./libstdc++-v3/include/bits/c++config ! 1308373582b ./libstdc++-v3/include/bits/char_traits.h 2805936695b ./libstdc++-v3/include/bits/codecvt.h 4120003531b ./libstdc++-v3/include/bits/concept_check.h 4222967943b ./libstdc++-v3/include/bits/concept_checks.h 3638262457b ./libstdc++-v3/include/bits/container_concepts.h 3915319002b ./libstdc++-v3/include/bits/cpp_type_traits.h 1601132351b ./libstdc++-v3/include/bits/fpos.h ! 3346516294b ./libstdc++-v3/include/bits/fstream.tcc 3886600201b ./libstdc++-v3/include/bits/functexcept.h 3431103117b ./libstdc++-v3/include/bits/generic_shadow.h 704022289b ./libstdc++-v3/include/bits/gslice.h 2680318333b ./libstdc++-v3/include/bits/gslice_array.h 3437988551b ./libstdc++-v3/include/bits/indirect_array.h 354751699b ./libstdc++-v3/include/bits/ios_base.h ! 1729704787b ./libstdc++-v3/include/bits/istream.tcc ! 1266456997b ./libstdc++-v3/include/bits/limits_generic.h 2347240123b ./libstdc++-v3/include/bits/locale_facets.h 4169892956b ./libstdc++-v3/include/bits/locale_facets.tcc 1654371752b ./libstdc++-v3/include/bits/localefwd.h 1773064307b ./libstdc++-v3/include/bits/mask_array.h 4212032713b ./libstdc++-v3/include/bits/ostream.tcc ! 3687512722b ./libstdc++-v3/include/bits/pthread_allocimpl.h 3133412073b ./libstdc++-v3/include/bits/sbuf_iter.h 4271226930b ./libstdc++-v3/include/bits/sequence_concepts.h 3998840520b ./libstdc++-v3/include/bits/slice.h 2371332296b ./libstdc++-v3/include/bits/slice_array.h ! 4036109720b ./libstdc++-v3/include/bits/sstream.tcc ! 2960553264b ./libstdc++-v3/include/bits/std_algorithm.h ! 3923119003b ./libstdc++-v3/include/bits/std_bitset.h ! 3808144147b ./libstdc++-v3/include/bits/std_complex.h ! 621971001b ./libstdc++-v3/include/bits/std_deque.h 1480548940b ./libstdc++-v3/include/bits/std_fstream.h ! 2164096612b ./libstdc++-v3/include/bits/std_functional.h 3352468770b ./libstdc++-v3/include/bits/std_iomanip.h 488282993b ./libstdc++-v3/include/bits/std_ios.h 1205323902b ./libstdc++-v3/include/bits/std_iosfwd.h 2709925409b ./libstdc++-v3/include/bits/std_iostream.h ! 360789683b ./libstdc++-v3/include/bits/std_istream.h ! 976786032b ./libstdc++-v3/include/bits/std_iterator.h ! 1716880668b ./libstdc++-v3/include/bits/std_list.h 3961142338b ./libstdc++-v3/include/bits/std_locale.h ! 2274087964b ./libstdc++-v3/include/bits/std_map.h ! 2882257112b ./libstdc++-v3/include/bits/std_memory.h ! 1193934437b ./libstdc++-v3/include/bits/std_numeric.h 2285426606b ./libstdc++-v3/include/bits/std_ostream.h ! 2212752790b ./libstdc++-v3/include/bits/std_queue.h ! 3254934855b ./libstdc++-v3/include/bits/std_set.h ! 671054152b ./libstdc++-v3/include/bits/std_sstream.h ! 109420361b ./libstdc++-v3/include/bits/std_stack.h ! 303255994b ./libstdc++-v3/include/bits/std_stdexcept.h 4010253753b ./libstdc++-v3/include/bits/std_streambuf.h 1317538322b ./libstdc++-v3/include/bits/std_string.h ! 2343886017b ./libstdc++-v3/include/bits/std_utility.h 3199914954b ./libstdc++-v3/include/bits/std_valarray.h ! 2359660614b ./libstdc++-v3/include/bits/std_vector.h ! 2532906966b ./libstdc++-v3/include/bits/stl_algo.h ! 1028946796b ./libstdc++-v3/include/bits/stl_algobase.h ! 791817473b ./libstdc++-v3/include/bits/stl_alloc.h ! 2497009473b ./libstdc++-v3/include/bits/stl_bvector.h 2179796154b ./libstdc++-v3/include/bits/stl_config.h ! 3899000506b ./libstdc++-v3/include/bits/stl_construct.h ! 861034895b ./libstdc++-v3/include/bits/stl_deque.h ! 4127464935b ./libstdc++-v3/include/bits/stl_function.h ! 2028203884b ./libstdc++-v3/include/bits/stl_heap.h ! 808944770b ./libstdc++-v3/include/bits/stl_iterator.h 181127396b ./libstdc++-v3/include/bits/stl_iterator_base.h ! 1915896363b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h ! 520923396b ./libstdc++-v3/include/bits/stl_iterator_base_types.h ! 1047399090b ./libstdc++-v3/include/bits/stl_list.h ! 4236527790b ./libstdc++-v3/include/bits/stl_map.h ! 4222750908b ./libstdc++-v3/include/bits/stl_multimap.h ! 2826619058b ./libstdc++-v3/include/bits/stl_multiset.h ! 1746963659b ./libstdc++-v3/include/bits/stl_numeric.h ! 1590380326b ./libstdc++-v3/include/bits/stl_pair.h ! 915298042b ./libstdc++-v3/include/bits/stl_pthread_alloc.h ! 588063054b ./libstdc++-v3/include/bits/stl_queue.h ! 1267656046b ./libstdc++-v3/include/bits/stl_raw_storage_iter.h ! 3245451035b ./libstdc++-v3/include/bits/stl_relops.h ! 158525970b ./libstdc++-v3/include/bits/stl_set.h ! 1020648860b ./libstdc++-v3/include/bits/stl_stack.h ! 1966304616b ./libstdc++-v3/include/bits/stl_tempbuf.h ! 3238588761b ./libstdc++-v3/include/bits/stl_threads.h ! 816994970b ./libstdc++-v3/include/bits/stl_tree.h ! 1244942255b ./libstdc++-v3/include/bits/stl_uninitialized.h ! 4204163989b ./libstdc++-v3/include/bits/stl_vector.h ! 1699005776b ./libstdc++-v3/include/bits/streambuf.tcc ! 2705556592b ./libstdc++-v3/include/bits/stringfwd.h ! 2753100055b ./libstdc++-v3/include/bits/type_traits.h 1275731289b ./libstdc++-v3/include/bits/valarray_array.h 1408725829b ./libstdc++-v3/include/bits/valarray_array.tcc ! 1480998652b ./libstdc++-v3/include/bits/valarray_meta.h 3294031792b ./libstdc++-v3/include/c/bits/std_cassert.h 1463522619b ./libstdc++-v3/include/c/bits/std_cctype.h 2203354679b ./libstdc++-v3/include/c/bits/std_cerrno.h --- 9243,9396 ---- 1991083162b ./libstdc++-v3/docs/html/26_numerics/howto.html 2452165260b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kanze.txt 3249620502b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kuehl.txt ! 3473074324b ./libstdc++-v3/docs/html/27_io/howto.html 1631173890b ./libstdc++-v3/docs/html/Makefile ! 2575593071b ./libstdc++-v3/docs/html/configopts.html 658418595b ./libstdc++-v3/docs/html/documentation.html + 2090229703b ./libstdc++-v3/docs/html/explanations.html 1651767880b ./libstdc++-v3/docs/html/ext/howto.html ! 3210824684b ./libstdc++-v3/docs/html/faq/index.html ! 3130354152b ./libstdc++-v3/docs/html/faq/index.txt 122913300b ./libstdc++-v3/docs/html/install.html 2049389478b ./libstdc++-v3/docs/html/lib3styles.css ! 4020997386b ./libstdc++-v3/include/Makefile.am ! 3653389813b ./libstdc++-v3/include/Makefile.in ! 3124086694b ./libstdc++-v3/include/backward/algo.h ! 3952415343b ./libstdc++-v3/include/backward/algobase.h ! 3083859890b ./libstdc++-v3/include/backward/alloc.h 3605066841b ./libstdc++-v3/include/backward/backward_warning.h ! 1443940237b ./libstdc++-v3/include/backward/bvector.h 3947901111b ./libstdc++-v3/include/backward/complex.h ! 397779689b ./libstdc++-v3/include/backward/defalloc.h ! 2793317910b ./libstdc++-v3/include/backward/deque.h 2323541526b ./libstdc++-v3/include/backward/fstream.h ! 678000316b ./libstdc++-v3/include/backward/function.h ! 1302395673b ./libstdc++-v3/include/backward/hash_map.h ! 2957554616b ./libstdc++-v3/include/backward/hash_set.h ! 1416592786b ./libstdc++-v3/include/backward/hashtable.h ! 3255441651b ./libstdc++-v3/include/backward/heap.h 2989618329b ./libstdc++-v3/include/backward/iomanip.h 1747716150b ./libstdc++-v3/include/backward/iostream.h 1766778751b ./libstdc++-v3/include/backward/istream.h ! 2552098315b ./libstdc++-v3/include/backward/iterator.h ! 475724936b ./libstdc++-v3/include/backward/list.h ! 2239784128b ./libstdc++-v3/include/backward/map.h ! 331224518b ./libstdc++-v3/include/backward/multimap.h ! 157058158b ./libstdc++-v3/include/backward/multiset.h 1959434229b ./libstdc++-v3/include/backward/new.h 3127480935b ./libstdc++-v3/include/backward/ostream.h ! 1702071145b ./libstdc++-v3/include/backward/pair.h 800595743b ./libstdc++-v3/include/backward/queue.h ! 1028905566b ./libstdc++-v3/include/backward/rope.h ! 1647731658b ./libstdc++-v3/include/backward/set.h ! 3815267460b ./libstdc++-v3/include/backward/slist.h ! 1493269043b ./libstdc++-v3/include/backward/stack.h 2367779603b ./libstdc++-v3/include/backward/stream.h 3194664680b ./libstdc++-v3/include/backward/streambuf.h ! 3842161536b ./libstdc++-v3/include/backward/strstream 3139222786b ./libstdc++-v3/include/backward/strstream.h ! 65721256b ./libstdc++-v3/include/backward/tempbuf.h ! 418149387b ./libstdc++-v3/include/backward/tree.h ! 3110792059b ./libstdc++-v3/include/backward/vector.h 4248267406b ./libstdc++-v3/include/bits/basic_file.h 2964830866b ./libstdc++-v3/include/bits/basic_ios.h 2254012334b ./libstdc++-v3/include/bits/basic_ios.tcc ! 2082508960b ./libstdc++-v3/include/bits/basic_string.h ! 1857306722b ./libstdc++-v3/include/bits/basic_string.tcc 1664028266b ./libstdc++-v3/include/bits/boost_concept_check.h ! 2383241272b ./libstdc++-v3/include/bits/c++config ! 2314692779b ./libstdc++-v3/include/bits/char_traits.h 2805936695b ./libstdc++-v3/include/bits/codecvt.h 4120003531b ./libstdc++-v3/include/bits/concept_check.h 4222967943b ./libstdc++-v3/include/bits/concept_checks.h 3638262457b ./libstdc++-v3/include/bits/container_concepts.h 3915319002b ./libstdc++-v3/include/bits/cpp_type_traits.h 1601132351b ./libstdc++-v3/include/bits/fpos.h ! 3545962146b ./libstdc++-v3/include/bits/fstream.tcc 3886600201b ./libstdc++-v3/include/bits/functexcept.h 3431103117b ./libstdc++-v3/include/bits/generic_shadow.h 704022289b ./libstdc++-v3/include/bits/gslice.h 2680318333b ./libstdc++-v3/include/bits/gslice_array.h 3437988551b ./libstdc++-v3/include/bits/indirect_array.h 354751699b ./libstdc++-v3/include/bits/ios_base.h ! 2213504588b ./libstdc++-v3/include/bits/istream.tcc ! 2076404966b ./libstdc++-v3/include/bits/limits_generic.h 2347240123b ./libstdc++-v3/include/bits/locale_facets.h 4169892956b ./libstdc++-v3/include/bits/locale_facets.tcc 1654371752b ./libstdc++-v3/include/bits/localefwd.h 1773064307b ./libstdc++-v3/include/bits/mask_array.h 4212032713b ./libstdc++-v3/include/bits/ostream.tcc ! 1424261561b ./libstdc++-v3/include/bits/pthread_allocimpl.h 3133412073b ./libstdc++-v3/include/bits/sbuf_iter.h 4271226930b ./libstdc++-v3/include/bits/sequence_concepts.h 3998840520b ./libstdc++-v3/include/bits/slice.h 2371332296b ./libstdc++-v3/include/bits/slice_array.h ! 3436409662b ./libstdc++-v3/include/bits/sstream.tcc ! 289136488b ./libstdc++-v3/include/bits/std_algorithm.h ! 2190102835b ./libstdc++-v3/include/bits/std_bitset.h ! 1951420756b ./libstdc++-v3/include/bits/std_complex.h ! 2026387708b ./libstdc++-v3/include/bits/std_deque.h 1480548940b ./libstdc++-v3/include/bits/std_fstream.h ! 909850763b ./libstdc++-v3/include/bits/std_functional.h 3352468770b ./libstdc++-v3/include/bits/std_iomanip.h 488282993b ./libstdc++-v3/include/bits/std_ios.h 1205323902b ./libstdc++-v3/include/bits/std_iosfwd.h 2709925409b ./libstdc++-v3/include/bits/std_iostream.h ! 570267107b ./libstdc++-v3/include/bits/std_istream.h ! 2834882043b ./libstdc++-v3/include/bits/std_iterator.h ! 4140823078b ./libstdc++-v3/include/bits/std_limits.h ! 2877785888b ./libstdc++-v3/include/bits/std_list.h 3961142338b ./libstdc++-v3/include/bits/std_locale.h ! 201090893b ./libstdc++-v3/include/bits/std_map.h ! 1460768210b ./libstdc++-v3/include/bits/std_memory.h ! 2302451537b ./libstdc++-v3/include/bits/std_numeric.h 2285426606b ./libstdc++-v3/include/bits/std_ostream.h ! 3179131913b ./libstdc++-v3/include/bits/std_queue.h ! 3133393677b ./libstdc++-v3/include/bits/std_set.h ! 1371200050b ./libstdc++-v3/include/bits/std_sstream.h ! 3598384035b ./libstdc++-v3/include/bits/std_stack.h ! 2264027066b ./libstdc++-v3/include/bits/std_stdexcept.h 4010253753b ./libstdc++-v3/include/bits/std_streambuf.h 1317538322b ./libstdc++-v3/include/bits/std_string.h ! 2339103859b ./libstdc++-v3/include/bits/std_utility.h 3199914954b ./libstdc++-v3/include/bits/std_valarray.h ! 258120529b ./libstdc++-v3/include/bits/std_vector.h ! 1915896541b ./libstdc++-v3/include/bits/stl_algo.h ! 3737848625b ./libstdc++-v3/include/bits/stl_algobase.h ! 1733002409b ./libstdc++-v3/include/bits/stl_alloc.h ! 1901902183b ./libstdc++-v3/include/bits/stl_bvector.h 2179796154b ./libstdc++-v3/include/bits/stl_config.h ! 2878454282b ./libstdc++-v3/include/bits/stl_construct.h ! 3420405531b ./libstdc++-v3/include/bits/stl_deque.h ! 1616976213b ./libstdc++-v3/include/bits/stl_function.h ! 3262343598b ./libstdc++-v3/include/bits/stl_heap.h ! 38213228b ./libstdc++-v3/include/bits/stl_iterator.h 181127396b ./libstdc++-v3/include/bits/stl_iterator_base.h ! 3659610962b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h ! 3251128673b ./libstdc++-v3/include/bits/stl_iterator_base_types.h ! 1963814561b ./libstdc++-v3/include/bits/stl_list.h ! 3450924006b ./libstdc++-v3/include/bits/stl_map.h ! 736048442b ./libstdc++-v3/include/bits/stl_multimap.h ! 1140070258b ./libstdc++-v3/include/bits/stl_multiset.h ! 2219429302b ./libstdc++-v3/include/bits/stl_numeric.h ! 1877454624b ./libstdc++-v3/include/bits/stl_pair.h ! 2893938050b ./libstdc++-v3/include/bits/stl_pthread_alloc.h ! 3110972640b ./libstdc++-v3/include/bits/stl_queue.h ! 2641345647b ./libstdc++-v3/include/bits/stl_raw_storage_iter.h ! 2949788455b ./libstdc++-v3/include/bits/stl_relops.h ! 451857313b ./libstdc++-v3/include/bits/stl_set.h ! 4190899759b ./libstdc++-v3/include/bits/stl_stack.h ! 2706761852b ./libstdc++-v3/include/bits/stl_tempbuf.h ! 4173037205b ./libstdc++-v3/include/bits/stl_threads.h ! 800388815b ./libstdc++-v3/include/bits/stl_tree.h ! 2510296522b ./libstdc++-v3/include/bits/stl_uninitialized.h ! 3933418180b ./libstdc++-v3/include/bits/stl_vector.h ! 2427064909b ./libstdc++-v3/include/bits/streambuf.tcc ! 3733069616b ./libstdc++-v3/include/bits/stringfwd.h ! 2281182376b ./libstdc++-v3/include/bits/type_traits.h 1275731289b ./libstdc++-v3/include/bits/valarray_array.h 1408725829b ./libstdc++-v3/include/bits/valarray_array.tcc ! 4062553156b ./libstdc++-v3/include/bits/valarray_meta.h 3294031792b ./libstdc++-v3/include/c/bits/std_cassert.h 1463522619b ./libstdc++-v3/include/c/bits/std_cctype.h 2203354679b ./libstdc++-v3/include/c/bits/std_cerrno.h *************** *** 9427,9441 **** 14436733b ./libstdc++-v3/include/c_std/bits/std_cwchar.h 566063818b ./libstdc++-v3/include/c_std/bits/std_cwctype.h 2457699013b ./libstdc++-v3/include/ext/bvector ! 631794789b ./libstdc++-v3/include/ext/hash_map ! 4259745340b ./libstdc++-v3/include/ext/hash_set ! 754659256b ./libstdc++-v3/include/ext/rope ! 3280035377b ./libstdc++-v3/include/ext/ropeimpl.h ! 4008498174b ./libstdc++-v3/include/ext/slist 4005867415b ./libstdc++-v3/include/ext/stl_bvector.h ! 3572885404b ./libstdc++-v3/include/ext/stl_hash_fun.h ! 409792476b ./libstdc++-v3/include/ext/stl_hashtable.h ! 4104645054b ./libstdc++-v3/include/ext/stl_rope.h 2948918123b ./libstdc++-v3/include/ext/tree 3439966783b ./libstdc++-v3/include/std/algorithm 2084535427b ./libstdc++-v3/include/std/bitset --- 9480,9494 ---- 14436733b ./libstdc++-v3/include/c_std/bits/std_cwchar.h 566063818b ./libstdc++-v3/include/c_std/bits/std_cwctype.h 2457699013b ./libstdc++-v3/include/ext/bvector ! 32562494b ./libstdc++-v3/include/ext/hash_map ! 1791958016b ./libstdc++-v3/include/ext/hash_set ! 852081170b ./libstdc++-v3/include/ext/rope ! 3281946583b ./libstdc++-v3/include/ext/ropeimpl.h ! 3974788162b ./libstdc++-v3/include/ext/slist 4005867415b ./libstdc++-v3/include/ext/stl_bvector.h ! 4275898655b ./libstdc++-v3/include/ext/stl_hash_fun.h ! 432472271b ./libstdc++-v3/include/ext/stl_hashtable.h ! 2912765281b ./libstdc++-v3/include/ext/stl_rope.h 2948918123b ./libstdc++-v3/include/ext/tree 3439966783b ./libstdc++-v3/include/std/algorithm 2084535427b ./libstdc++-v3/include/std/bitset *************** *** 9484,9492 **** 2645437597b ./libstdc++-v3/include/std/utility 2280752861b ./libstdc++-v3/include/std/valarray 392237057b ./libstdc++-v3/include/std/vector ! 42295107b ./libstdc++-v3/libio/ChangeLog ! 2530860285b ./libstdc++-v3/libio/Makefile.am ! 3525803389b ./libstdc++-v3/libio/Makefile.in 314955067b ./libstdc++-v3/libio/_G_config.h 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c --- 9537,9545 ---- 2645437597b ./libstdc++-v3/include/std/utility 2280752861b ./libstdc++-v3/include/std/valarray 392237057b ./libstdc++-v3/include/std/vector ! 3071558991b ./libstdc++-v3/libio/ChangeLog ! 226381804b ./libstdc++-v3/libio/Makefile.am ! 1424658516b ./libstdc++-v3/libio/Makefile.in 314955067b ./libstdc++-v3/libio/_G_config.h 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c *************** *** 9502,9522 **** 688559115b ./libstdc++-v3/libio/wfiledoalloc.c 871695306b ./libstdc++-v3/libio/wfileops.c 2568419733b ./libstdc++-v3/libio/wgenops.c ! 1517379775b ./libstdc++-v3/libmath/Makefile.am ! 2380628024b ./libstdc++-v3/libmath/Makefile.in ! 2936223825b ./libstdc++-v3/libmath/atan2f.c 3059642182b ./libstdc++-v3/libmath/copysignf.c ! 3371082726b ./libstdc++-v3/libmath/expf.c ! 2757049444b ./libstdc++-v3/libmath/hypot.c ! 2665375112b ./libstdc++-v3/libmath/hypotf.c ! 2348856819b ./libstdc++-v3/libmath/hypotl.c ! 2520447555b ./libstdc++-v3/libmath/mathconf.h 875119219b ./libstdc++-v3/libmath/nan.c 4185958949b ./libstdc++-v3/libmath/signbit.c 2047804662b ./libstdc++-v3/libmath/signbitf.c 711912297b ./libstdc++-v3/libmath/signbitl.c ! 79633951b ./libstdc++-v3/libsupc++/Makefile.am ! 1097506929b ./libstdc++-v3/libsupc++/Makefile.in 1538560956b ./libstdc++-v3/libsupc++/cxxabi.h 3887473586b ./libstdc++-v3/libsupc++/del_op.cc 2108254126b ./libstdc++-v3/libsupc++/del_opnt.cc --- 9555,9571 ---- 688559115b ./libstdc++-v3/libio/wfiledoalloc.c 871695306b ./libstdc++-v3/libio/wfileops.c 2568419733b ./libstdc++-v3/libio/wgenops.c ! 1992629512b ./libstdc++-v3/libmath/Makefile.am ! 2926368723b ./libstdc++-v3/libmath/Makefile.in 3059642182b ./libstdc++-v3/libmath/copysignf.c ! 3949749210b ./libstdc++-v3/libmath/mathconf.h 875119219b ./libstdc++-v3/libmath/nan.c 4185958949b ./libstdc++-v3/libmath/signbit.c 2047804662b ./libstdc++-v3/libmath/signbitf.c 711912297b ./libstdc++-v3/libmath/signbitl.c ! 2028045037b ./libstdc++-v3/libmath/stubs.c ! 2808634066b ./libstdc++-v3/libsupc++/Makefile.am ! 2573998188b ./libstdc++-v3/libsupc++/Makefile.in 1538560956b ./libstdc++-v3/libsupc++/cxxabi.h 3887473586b ./libstdc++-v3/libsupc++/del_op.cc 2108254126b ./libstdc++-v3/libsupc++/del_opnt.cc *************** *** 9530,9538 **** 2661319592b ./libstdc++-v3/libsupc++/eh_personality.cc 192927225b ./libstdc++-v3/libsupc++/eh_terminate.cc 2900215744b ./libstdc++-v3/libsupc++/eh_throw.cc ! 2982647591b ./libstdc++-v3/libsupc++/exception 3453419455b ./libstdc++-v3/libsupc++/exception_defines.h ! 3795937353b ./libstdc++-v3/libsupc++/new 1474493160b ./libstdc++-v3/libsupc++/new_handler.cc 4140508393b ./libstdc++-v3/libsupc++/new_op.cc 1924050083b ./libstdc++-v3/libsupc++/new_opnt.cc --- 9579,9587 ---- 2661319592b ./libstdc++-v3/libsupc++/eh_personality.cc 192927225b ./libstdc++-v3/libsupc++/eh_terminate.cc 2900215744b ./libstdc++-v3/libsupc++/eh_throw.cc ! 188596486b ./libstdc++-v3/libsupc++/exception 3453419455b ./libstdc++-v3/libsupc++/exception_defines.h ! 2432709783b ./libstdc++-v3/libsupc++/new 1474493160b ./libstdc++-v3/libsupc++/new_handler.cc 4140508393b ./libstdc++-v3/libsupc++/new_op.cc 1924050083b ./libstdc++-v3/libsupc++/new_opnt.cc *************** *** 9542,9574 **** 4000313327b ./libstdc++-v3/libsupc++/tinfo.cc 684549201b ./libstdc++-v3/libsupc++/tinfo.h 2446382575b ./libstdc++-v3/libsupc++/tinfo2.cc ! 3120525120b ./libstdc++-v3/libsupc++/typeinfo 3616638474b ./libstdc++-v3/libsupc++/unwind-cxx.h 3864118754b ./libstdc++-v3/libsupc++/vec.cc 3043274587b ./libstdc++-v3/mkc++config ! 3958186584b ./libstdc++-v3/mkcheck.in 3790569303b ./libstdc++-v3/mkcshadow 805804711b ./libstdc++-v3/mkinclosure ! 2786368026b ./libstdc++-v3/mknumeric_limits ! 754979035b ./libstdc++-v3/porting.texi ! 4108118379b ./libstdc++-v3/src/Makefile.am ! 2231735551b ./libstdc++-v3/src/Makefile.in ! 1601356108b ./libstdc++-v3/src/bitset.cc 3763564632b ./libstdc++-v3/src/codecvt.cc 2074797863b ./libstdc++-v3/src/complex_io.cc 3833330768b ./libstdc++-v3/src/functexcept.cc ! 212793364b ./libstdc++-v3/src/gen-num-limits.cc 681129958b ./libstdc++-v3/src/globals.cc 1383759180b ./libstdc++-v3/src/ios.cc 641891272b ./libstdc++-v3/src/limits_generic.cc 888901044b ./libstdc++-v3/src/locale-inst.cc ! 3062632372b ./libstdc++-v3/src/locale.cc 3678785766b ./libstdc++-v3/src/localename.cc 4290618040b ./libstdc++-v3/src/misc-inst.cc 1726669856b ./libstdc++-v3/src/stdexcept.cc 3210807708b ./libstdc++-v3/src/stl-inst.cc 2153343514b ./libstdc++-v3/src/string-inst.cc ! 1690237636b ./libstdc++-v3/src/strstream.cc 2505521591b ./libstdc++-v3/src/valarray-inst.cc 1651008667b ./libstdc++-v3/src/wstring-inst.cc 3407177850b ./libstdc++-v3/testsuite/17_intro/header_cassert.cc --- 9591,9625 ---- 4000313327b ./libstdc++-v3/libsupc++/tinfo.cc 684549201b ./libstdc++-v3/libsupc++/tinfo.h 2446382575b ./libstdc++-v3/libsupc++/tinfo2.cc ! 250050351b ./libstdc++-v3/libsupc++/typeinfo 3616638474b ./libstdc++-v3/libsupc++/unwind-cxx.h 3864118754b ./libstdc++-v3/libsupc++/vec.cc 3043274587b ./libstdc++-v3/mkc++config ! 3093437076b ./libstdc++-v3/mkcheck.in 3790569303b ./libstdc++-v3/mkcshadow 805804711b ./libstdc++-v3/mkinclosure ! 1536428020b ./libstdc++-v3/mknumeric_limits ! 2605795304b ./libstdc++-v3/porting.texi ! 2780687464b ./libstdc++-v3/src/Makefile.am ! 4194825822b ./libstdc++-v3/src/Makefile.in ! 1651858599b ./libstdc++-v3/src/bitset.cc ! 3659270218b ./libstdc++-v3/src/cmath.cc 3763564632b ./libstdc++-v3/src/codecvt.cc 2074797863b ./libstdc++-v3/src/complex_io.cc 3833330768b ./libstdc++-v3/src/functexcept.cc ! 180238345b ./libstdc++-v3/src/gen-num-limits.cc 681129958b ./libstdc++-v3/src/globals.cc 1383759180b ./libstdc++-v3/src/ios.cc + 3763069051b ./libstdc++-v3/src/limits.cc 641891272b ./libstdc++-v3/src/limits_generic.cc 888901044b ./libstdc++-v3/src/locale-inst.cc ! 4248120791b ./libstdc++-v3/src/locale.cc 3678785766b ./libstdc++-v3/src/localename.cc 4290618040b ./libstdc++-v3/src/misc-inst.cc 1726669856b ./libstdc++-v3/src/stdexcept.cc 3210807708b ./libstdc++-v3/src/stl-inst.cc 2153343514b ./libstdc++-v3/src/string-inst.cc ! 3829054154b ./libstdc++-v3/src/strstream.cc 2505521591b ./libstdc++-v3/src/valarray-inst.cc 1651008667b ./libstdc++-v3/src/wstring-inst.cc 3407177850b ./libstdc++-v3/testsuite/17_intro/header_cassert.cc *************** *** 9605,9611 **** 3985370954b ./libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc 4052621376b ./libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc 1265470747b ./libstdc++-v3/testsuite/21_strings/compare.cc ! 2137486574b ./libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc 4139768422b ./libstdc++-v3/testsuite/21_strings/element_access.cc 493313566b ./libstdc++-v3/testsuite/21_strings/find.cc 4256816922b ./libstdc++-v3/testsuite/21_strings/insert.cc --- 9656,9662 ---- 3985370954b ./libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc 4052621376b ./libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc 1265470747b ./libstdc++-v3/testsuite/21_strings/compare.cc ! 1778105169b ./libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc 4139768422b ./libstdc++-v3/testsuite/21_strings/element_access.cc 493313566b ./libstdc++-v3/testsuite/21_strings/find.cc 4256816922b ./libstdc++-v3/testsuite/21_strings/insert.cc *************** *** 9716,9728 **** 1110785128b ./libstdc++-v3/testsuite/27_io/ostream_unformatted.cc 679364921b ./libstdc++-v3/testsuite/27_io/ostringstream_members.cc 4277495279b ./libstdc++-v3/testsuite/27_io/streambuf.cc ! 2262929066b ./libstdc++-v3/testsuite/27_io/stringbuf.cc 2183091853b ./libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc 1703881739b ./libstdc++-v3/testsuite/27_io/stringstream.cc 3596528495b ./libstdc++-v3/testsuite/27_io/stringstream_members.cc 3615124904b ./libstdc++-v3/testsuite/27_io/wide_stream_objects.cc 2294107082b ./libstdc++-v3/testsuite/Makefile.am ! 2854604485b ./libstdc++-v3/testsuite/Makefile.in 2848669759b ./libstdc++-v3/testsuite/README 872857903b ./libstdc++-v3/testsuite/config/default.exp 3288938735b ./libstdc++-v3/testsuite/debug_assert.h --- 9767,9779 ---- 1110785128b ./libstdc++-v3/testsuite/27_io/ostream_unformatted.cc 679364921b ./libstdc++-v3/testsuite/27_io/ostringstream_members.cc 4277495279b ./libstdc++-v3/testsuite/27_io/streambuf.cc ! 1462425224b ./libstdc++-v3/testsuite/27_io/stringbuf.cc 2183091853b ./libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc 1703881739b ./libstdc++-v3/testsuite/27_io/stringstream.cc 3596528495b ./libstdc++-v3/testsuite/27_io/stringstream_members.cc 3615124904b ./libstdc++-v3/testsuite/27_io/wide_stream_objects.cc 2294107082b ./libstdc++-v3/testsuite/Makefile.am ! 3640355275b ./libstdc++-v3/testsuite/Makefile.in 2848669759b ./libstdc++-v3/testsuite/README 872857903b ./libstdc++-v3/testsuite/config/default.exp 3288938735b ./libstdc++-v3/testsuite/debug_assert.h *************** *** 9730,9755 **** 1821447959b ./libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp 2361428628b ./libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp 1352817621b ./libstdc++-v3/testsuite/printnow.c ! 1457631762b ./libstdc++-v3/testsuite_flags.in 4084702431b ./libtool.m4 ! 148243631b ./ltcf-c.sh ! 91270770b ./ltcf-cxx.sh ! 2266202316b ./ltcf-gcj.sh ! 805479348b ./ltconfig ! 237192095b ./ltmain.sh 990942143b ./missing 2656466409b ./mkdep 4236112450b ./mkinstalldirs 902556840b ./move-if-change 1077958069b ./symlink-tree 1370970362b ./ylwrap ! 1511644545b ./zlib/ChangeLog ! 3745891188b ./zlib/ChangeLog.gcj 3874989574b ./zlib/FAQ 467711448b ./zlib/INDEX 3901505907b ./zlib/Make_vms.com 1133202278b ./zlib/Makefile.am ! 3685738675b ./zlib/Makefile.in 3707467235b ./zlib/Makefile.riscos 72241230b ./zlib/README 1221785251b ./zlib/acinclude.m4 --- 9781,9806 ---- 1821447959b ./libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp 2361428628b ./libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp 1352817621b ./libstdc++-v3/testsuite/printnow.c ! 1283007056b ./libstdc++-v3/testsuite_flags.in 4084702431b ./libtool.m4 ! 2081401147b ./ltcf-c.sh ! 534669854b ./ltcf-cxx.sh ! 3594421631b ./ltcf-gcj.sh ! 30175378b ./ltconfig ! 4261167591b ./ltmain.sh 990942143b ./missing 2656466409b ./mkdep 4236112450b ./mkinstalldirs 902556840b ./move-if-change 1077958069b ./symlink-tree 1370970362b ./ylwrap ! 825175620b ./zlib/ChangeLog ! 2655845150b ./zlib/ChangeLog.gcj 3874989574b ./zlib/FAQ 467711448b ./zlib/INDEX 3901505907b ./zlib/Make_vms.com 1133202278b ./zlib/Makefile.am ! 3677194275b ./zlib/Makefile.in 3707467235b ./zlib/Makefile.riscos 72241230b ./zlib/README 1221785251b ./zlib/acinclude.m4 *************** *** 9759,9766 **** 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas 3703350509b ./zlib/compress.c ! 305591031b ./zlib/configure ! 3472202392b ./zlib/configure.in 3769239525b ./zlib/contrib/README.contrib 215845136b ./zlib/contrib/asm386/gvmat32.asm 4143184108b ./zlib/contrib/asm386/gvmat32c.c --- 9810,9817 ---- 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas 3703350509b ./zlib/compress.c ! 3871307965b ./zlib/configure ! 2035691596b ./zlib/configure.in 3769239525b ./zlib/contrib/README.contrib 215845136b ./zlib/contrib/asm386/gvmat32.asm 4143184108b ./zlib/contrib/asm386/gvmat32c.c diff -Nrc3pad gcc-3.0/.cvsignore gcc-3.0.1/.cvsignore *** gcc-3.0/.cvsignore Sat Jul 22 01:08:20 2000 --- gcc-3.0.1/.cvsignore Sat Jul 28 23:46:53 2001 *************** dir.info *** 29,32 **** Makefile lost+found update.out ! --- 29,32 ---- Makefile lost+found update.out ! LAST_UPDATED diff -Nrc3pad gcc-3.0/BUGS gcc-3.0.1/BUGS *** gcc-3.0/BUGS Sun Jun 17 12:50:01 2001 --- gcc-3.0.1/BUGS Sun Aug 19 17:45:09 2001 *************** *** 1,19 **** The latest version of this document is always available at [1]http://gcc.gnu.org/bugs.html. ! [2]Reporting Bugs | [3]Managing Bugs (GNATS and the test-suite) | ! [4]Frequently Reported Bugs in GCC 3.0 Reporting Bugs ! Our preferred way of receiving bugs is via our [5]GNATS bug reporting ! system. ! Before you report a bug, please check the [6]list of well-known bugs and, if possible in any way, try a current development snapshot or ! [7]CodeSourcery's Online Test Compilation. If you want to report a bug ! with egcs 1.x or versions of GCC before 3.0 we strongly recommend upgrading to the current release first. Before reporting that GCC compiles your code incorrectly, please --- 1,39 ---- + GCC Bugs + The latest version of this document is always available at [1]http://gcc.gnu.org/bugs.html. + _________________________________________________________________ ! Table of Contents ! ! * [2]Reporting Bugs ! + [3]What we need ! + [4]What we DON'T want ! + [5]Where to post it ! + [6]Detailed bug reporting instructions ! * [7]Managing Bugs (GNATS and the test-suite) ! * [8]Frequently Reported Bugs in GCC 3.0 ! + [9]General ! + [10]Fortran ! + [11]C ! + [12]C++ ! o [13]Common problems updating from G++ 2.95 to G++ 3.0 ! o [14]Non-bugs ! o [15]Missing features ! o [16]Parse errors for "simple" code ! o [17]Optimization at -O3 takes a very long time ! _________________________________________________________________ Reporting Bugs ! Our preferred way of receiving bugs is via the [18]GCC GNATS bug ! reporting system. ! Before you report a bug, please check the [19]list of well-known bugs and, if possible in any way, try a current development snapshot or ! [20]CodeSourcery's Online Test Compilation. If you want to report a ! bug with egcs 1.x or versions of GCC before 3.0 we strongly recommend upgrading to the current release first. Before reporting that GCC compiles your code incorrectly, please *************** Summarized bug reporting instructions *** 78,87 **** Where to post it ! Please submit your bug report directly to our [8]GNATS bug database. ! If this is not possible, please mail all information to ! gcc-bugs@gcc.gnu.org ! . Detailed bug reporting instructions --- 98,106 ---- Where to post it ! Please submit your bug report directly to the [21]GCC GNATS bug ! database. If this is not possible, please mail all information to ! [22]gcc-bugs@gcc.gnu.org. Detailed bug reporting instructions *************** Detailed bug reporting instructions *** 89,96 **** the command line below, as well as its output and the preprocessed file it generates. ! gcc -v -save-temps all-your-options source-file ! Typically the preprocessed file (extension .i for C or .ii for C++) will be large, so please compress the resulting file with one of the popular compression programs such as bzip2, gzip, zip or compress (in --- 108,115 ---- the command line below, as well as its output and the preprocessed file it generates. ! gcc -v -save-temps all-your-options source-file ! Typically the preprocessed file (extension .i for C or .ii for C++) will be large, so please compress the resulting file with one of the popular compression programs such as bzip2, gzip, zip or compress (in *************** Detailed bug reporting instructions *** 127,133 **** The gcc lists have message size limits (200 kbytes) and bug reports over those limits will currently be bounced. If your bug is larger ! than that, please post it directly in GNATS. If you fail to supply enough information for a bug report to be reproduced, someone will probably ask you to post additional --- 146,152 ---- The gcc lists have message size limits (200 kbytes) and bug reports over those limits will currently be bounced. If your bug is larger ! than that, please post it using the [23]GCC GNATS bug database. If you fail to supply enough information for a bug report to be reproduced, someone will probably ask you to post additional *************** Detailed bug reporting instructions *** 157,179 **** 1. Create a (minimal) test-case. 2. Add the test-case to our test-suite, marking it as PASS. 3. Check in your fixes. ! Frequently Reported Bugs in GCC 3.0 General The following bugs are very frequently reported. * GCC 2.95.2 does not build on GNU/Linux systems using glibc 2.2, ! such as Red Hat 7.0. A [9]patch is available. This will be fixed ! in GCC 2.95.3 and GCC 3.0. * GCC 2.95.2 crashes when compiling mbx.c from the PINE 4.30 or IMAP2000 distribution on Sparc systems running Solaris. ! Fortran Fortran bugs are documented in the G77 manual rather than explicitly ! listed here. Please see [10]"Known Causes of Trouble with GNU Fortran" ! in the [11]G77 manual. C++ --- 176,299 ---- 1. Create a (minimal) test-case. 2. Add the test-case to our test-suite, marking it as PASS. 3. Check in your fixes. ! _________________________________________________________________ ! Frequently Reported Bugs in GCC 3.0 General The following bugs are very frequently reported. * GCC 2.95.2 does not build on GNU/Linux systems using glibc 2.2, ! such as Red Hat 7.0. A [24]patch is available. This is fixed in ! GCC 2.95.3 and GCC 3.0. * GCC 2.95.2 crashes when compiling mbx.c from the PINE 4.30 or IMAP2000 distribution on Sparc systems running Solaris. ! _________________________________________________________________ ! Fortran Fortran bugs are documented in the G77 manual rather than explicitly ! listed here. Please see [25]"Known Causes of Trouble with GNU Fortran" ! in the [26]G77 manual. ! _________________________________________________________________ ! ! C ! ! The following are not bugs in the C compiler, but are reported often ! enough to warrant a mention here. ! ! Cannot initialize a static variable with stdin. ! This has nothing to do with GCC, but people ask us about it a ! lot. Code like this: ! ! #include FILE *yyin = stdin; ! ! will not compile with GNU libc (GNU/Linux libc6), because stdin ! is not a constant. This was done deliberately, in order for ! there to be no limit on the number of open FILE objects. It is ! surprising for people used to traditional Unix C libraries, but ! it is permitted by the C standard. ! ! This construct commonly occurs in code generated by old ! versions of lex or yacc. We suggest you try regenerating the ! parser with a current version of flex or bison, respectively. ! In your own code, the appropriate fix is to move the ! initialization to the beginning of main. ! ! There is a common misconception that the GCC developers are ! responsible for GNU libc. These are in fact two entirely ! separate projects. The appropriate place to ask questions ! relating to GNU libc is [27]libc-alpha@sources.redhat.com. ! ! Cannot use preprocessor directive in macro arguments. ! Let me guess... you wrote code that looks something like this: ! ! memcpy(dest, src, #ifdef PLATFORM1 12 #else 24 #endif ); ! ! and you got a whole pile of error messages: ! ! test.c:11: warning: preprocessing directive not recognized within ! macro arg ! test.c:11: warning: preprocessing directive not recognized within ! macro arg ! test.c:11: warning: preprocessing directive not recognized within ! macro arg ! test.c: In function `foo': ! test.c:6: undefined or invalid # directive ! test.c:8: undefined or invalid # directive ! test.c:9: parse error before `24' ! test.c:10: undefined or invalid # directive ! test.c:11: parse error before `#' ! ! The problem, simply put, is that GCC's preprocessor does not ! allow you to put #ifdef (or any other directive) inside the ! arguments of a macro. Your C library's happens to ! define memcpy as a macro - this is perfectly legitimate. The ! code therefore will not compile. ! ! We have two good reasons for not allowing directives inside ! macro arguments. First, it is not portable. It is "undefined ! behavior" according to the C standard; that means different ! compilers will do different things with it. Some will give you ! errors. Some will dump core. Some will silently mangle your ! code - you could get the equivalent of ! ! memcpy(dest, src, 1224); ! ! from the above example. A very few might do what you expected ! it to. We therefore feel it is most useful for GCC to reject ! this construct immediately so that it is found and fixed. ! ! Second, it is extraordinarily difficult to implement the ! preprocessor such that it does what you would expect for every ! possible directive found inside a macro argument. The best ! example is perhaps ! ! #define foo(arg) ... arg ... ! foo(blah ! #undef foo ! blah) ! ! which is impossible to implement in portable C without leaking ! memory. Allowing only a subset of directives would be ! confusing. ! ! It is always possible to rewrite code which uses conditionals ! inside macros so that it doesn't. You could write the above ! example ! ! #ifdef PLATFORM1 ! memcpy(dest, src, 12); ! #else ! memcpy(dest, src, 24); ! #endif ! ! This is a bit more typing, but I personally think it's better ! style in addition to being more portable. ! ! In recent versions of glibc, printf is among the functions ! which are implemented as macros. ! _________________________________________________________________ C++ *************** C++ *** 181,187 **** reported very often, but not yet fixed. While it is certainly better to fix bugs instead of documenting them, this document might save people the effort of writing a bug report when the bug is already ! well-known. [12]How to report bugs tells you how to report a bug. There are many reasons why reported bugs don't get fixed. It might be difficult to fix, or fixing it might break compatibility. Often, --- 301,307 ---- reported very often, but not yet fixed. While it is certainly better to fix bugs instead of documenting them, this document might save people the effort of writing a bug report when the bug is already ! well-known. [28]How to report bugs tells you how to report a bug. There are many reasons why reported bugs don't get fixed. It might be difficult to fix, or fixing it might break compatibility. Often, *************** C++ *** 197,209 **** compiler. This is currently 3.0. Many commonly reported bugs in earlier releases are fixed in that version. ! Common problems updating from g++ 2.95 to g++ 3.0 ! g++ 3.0 conforms much closer to the ISO C++ standard (available at ! [13]http://www.ncits.org/cplusplus.htm). We have also implemented some ! of the core and library defect reports (available at ! [14]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! [15]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively). * The ABI has changed. This means that both class layout and name mangling is different. You must recompile all c++ libraries (if --- 317,331 ---- compiler. This is currently 3.0. Many commonly reported bugs in earlier releases are fixed in that version. ! Common problems updating from G++ 2.95 to G++ 3.0 ! G++ 3.0 conforms much closer to the ISO C++ standard (available at ! [29]http://www.ncits.org/cplusplus.htm). ! ! We have also implemented some of the core and library defect reports ! (available at ! [30]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! [31]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively). * The ABI has changed. This means that both class layout and name mangling is different. You must recompile all c++ libraries (if *************** C++ *** 214,220 **** * The standard header files for the c library don't end with .h, but begin with c (i.e. rather than ). The .h names are still available, but are deprecated. ! * is deprecated, use instead. * streambuf::seekoff & streambuf::seekpos are private, instead use streambuf::pubseekoff & streambuf::pubseekpos respectively. * If std::operator << (std::ostream &, long long) doesn't exist, you --- 336,344 ---- * The standard header files for the c library don't end with .h, but begin with c (i.e. rather than ). The .h names are still available, but are deprecated. ! * is deprecated, use instead. (The 3.0 BUGS ! file says , that was an error, stringstream is the ! class defined in .) * streambuf::seekoff & streambuf::seekpos are private, instead use streambuf::pubseekoff & streambuf::pubseekpos respectively. * If std::operator << (std::ostream &, long long) doesn't exist, you *************** C++ *** 249,256 **** specification. G++ emits two copies of constructors and destructors. ! In general there are three types of constructor (and ! destructor). 1. The complete object constructor/destructor. 2. The base object constructor/destructor. --- 373,380 ---- specification. G++ emits two copies of constructors and destructors. ! In general there are three types of constructors (and ! destructors). 1. The complete object constructor/destructor. 2. The base object constructor/destructor. *************** C++ *** 260,273 **** involved. In some cases we can do better, and this is logged in GNATS. ! Exceptions don't work in multithreaded applications You need to rebuild g++ and libstdc++ with --enable-threads. Remember, c++ exceptions are not like hardware interrupts. You cannot throw an exception in one thread and catch it in another. You cannot throw an exception from a signal handler, and catch it in the main thread. ! Global destructors are not run in the correct order Global destructors should be run in the reverse order of their constructors completing. In most cases this is the same as the reverse order of constructors starting, but sometimes it is --- 384,397 ---- involved. In some cases we can do better, and this is logged in GNATS. ! Exceptions don't work in multithreaded applications. You need to rebuild g++ and libstdc++ with --enable-threads. Remember, c++ exceptions are not like hardware interrupts. You cannot throw an exception in one thread and catch it in another. You cannot throw an exception from a signal handler, and catch it in the main thread. ! Global destructors are not run in the correct order. Global destructors should be run in the reverse order of their constructors completing. In most cases this is the same as the reverse order of constructors starting, but sometimes it is *************** C++ *** 276,287 **** switch on by default, as it requires a cxa aware runtime library (libc, glibc, or equivalent). Missing features ! We know some things are missing from g++. ! export is not implemented. ! The keyword will be parsed correctly, but has no effect. Two stage lookup in templates is not implemented. [14.6] specifies how names are looked up inside a template. G++ --- 400,441 ---- switch on by default, as it requires a cxa aware runtime library (libc, glibc, or equivalent). + Problems with floating point computations. + In a number of cases, GCC appears to perform floating point + computations incorrectly. For example, the program + + #include + int main() { + double min = 0.0; + double max = 0.5; + double width = 0.01; + std::cout << (int)(((max - min) / width) - 1) << std::endl; + } + + might print 50 on some systems and optimization levels, and 51 + on others. + + The is the result of rounding: The computer cannot represent + all real numbers exactly, so it has to use approximations. When + computing with approximation, the computer needs to round to + the nearest representable number. + + This is not a bug in the compiler, but an inherent limitation + of the float and double types. Please study [32]this paper for + more information. + Missing features ! We know some things are missing from G++. ! The export keyword is not implemented. ! Most C++ compilers (G++ included) do not yet implement export, ! which is necessary for separate compilation of template ! declarations and definitions. Without export, a template ! definition must be in scope to be used. The obvious workaround ! is simply to place all definitions in the header itself. ! Alternatively, the compilation unit containing template ! definitions may be included from the header. Two stage lookup in templates is not implemented. [14.6] specifies how names are looked up inside a template. G++ *************** C++ *** 290,298 **** Parse errors for "simple" code ! Up to and including GCC 3.0, the compiler will give "parse ! error" for seemingly simple code, such as ! struct A{ A(); A(int); --- 444,451 ---- Parse errors for "simple" code ! Up to and including GCC 3.0, the compiler will give "parse error" for ! seemingly simple code, such as struct A{ A(); A(int); *************** void foo(){ *** 310,331 **** B(A(2)).func(); //B temporary, initialized with A temporary } ! The problem is that GCC starts to parse the declaration of b as ! a function b returning B, taking a function returning A as an ! argument. When it sees the 1, it is too late. The work-around ! in these cases is to add additional parentheses around the ! expressions that are mistaken as declarations: ! (B(A(2))).func(); ! Sometimes, even that is not enough; to show the compiler that ! this should be really an expression, a comma operator with a ! dummy argument can be used: ! B b((0,A()),A(1)); ! Another example is the parse error for the return statement in ! struct A{}; struct B{ --- 463,481 ---- B(A(2)).func(); //B temporary, initialized with A temporary } ! The problem is that GCC starts to parse the declaration of b as a ! function b returning B, taking a function returning A as an argument. ! When it sees the 1, it is too late. The work-around in these cases is ! to add additional parentheses around the expressions that are mistaken ! as declarations: (B(A(2))).func(); ! Sometimes, even that is not enough; to show the compiler that this ! should be really an expression, a comma operator with a dummy argument ! can be used: B b((0,A()),A(1)); ! Another example is the parse error for the return statement in struct A{}; struct B{ *************** A B::f1(bool b) *** 340,381 **** return a; } ! The problem is that the compiler interprets A() as a function ! (taking no arguments, returning A), and (A()) as a cast - with ! a missing expression, hence the parse error. The work-around is ! to omit the parentheses: ! if (b) return A(); ! This problem occurs in a number of variants; in throw ! statements, people also frequently put the object in ! parentheses. The exact error also somewhat varies with the ! compiler version. The work-arounds proposed do not change the ! semantics of the program at all; they make them perhaps less ! readable. ! Optimization at -O3 takes a very long time ! At -O3, all functions are candidates for inlining. The ! heuristic used has some deficiencies which show up when allowed ! such freedom. This is g++ specific, as it has an earlier ! inliner than gcc. References 1. http://gcc.gnu.org/bugs.html 2. http://gcc.gnu.org/bugs.html#report ! 3. http://gcc.gnu.org/bugs.html#manage ! 4. http://gcc.gnu.org/bugs.html#known ! 5. http://gcc.gnu.org/gnats.html ! 6. http://gcc.gnu.org/bugs.html#known ! 7. http://www.codesourcery.com/gcc-compile.shtml ! 8. http://gcc.gnu.org/gnats.html ! 9. http://gcc.gnu.org/install/glibc-2.2.patch ! 10. http://gcc.gnu.org/onlinedocs/g77_bugs.html ! 11. http://gcc.gnu.org/onlinedocs/g77_toc.html ! 12. http://gcc.gnu.org/bugs.html#report ! 13. http://www.ncits.org/cplusplus.htm ! 14. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html ! 15. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html --- 490,545 ---- return a; } ! The problem is that the compiler interprets A() as a function (taking ! no arguments, returning A), and (A()) as a cast - with a missing ! expression, hence the parse error. The work-around is to omit the ! parentheses: if (b) return A(); ! This problem occurs in a number of variants; in throw statements, ! people also frequently put the object in parentheses. The exact error ! also somewhat varies with the compiler version. The work-arounds ! proposed do not change the semantics of the program at all; they make ! them perhaps less readable. ! Optimization at -O3 takes a very long time ! At -O3, all functions are candidates for inlining. The heuristic used ! has some deficiencies which show up when allowed such freedom. This is ! g++ specific, as it has an earlier inliner than gcc. References 1. http://gcc.gnu.org/bugs.html 2. http://gcc.gnu.org/bugs.html#report ! 3. http://gcc.gnu.org/bugs.html#need ! 4. http://gcc.gnu.org/bugs.html#dontwant ! 5. http://gcc.gnu.org/bugs.html#where ! 6. http://gcc.gnu.org/bugs.html#detailed ! 7. http://gcc.gnu.org/bugs.html#manage ! 8. http://gcc.gnu.org/bugs.html#known ! 9. http://gcc.gnu.org/bugs.html#general ! 10. http://gcc.gnu.org/bugs.html#fortran ! 11. http://gcc.gnu.org/bugs.html#c ! 12. http://gcc.gnu.org/bugs.html#cplusplus ! 13. http://gcc.gnu.org/bugs.html#updating ! 14. http://gcc.gnu.org/bugs.html#nonbugs ! 15. http://gcc.gnu.org/bugs.html#missing ! 16. http://gcc.gnu.org/bugs.html#parsing ! 17. http://gcc.gnu.org/bugs.html#-O3 ! 18. http://gcc.gnu.org/gnats.html ! 19. http://gcc.gnu.org/bugs.html#known ! 20. http://www.codesourcery.com/gcc-compile.shtml ! 21. http://gcc.gnu.org/gnats.html ! 22. mailto:gcc-bugs@gcc.gnu.org ! 23. http://gcc.gnu.org/gnats.html ! 24. http://gcc.gnu.org/install/glibc-2.2.patch ! 25. http://gcc.gnu.org/onlinedocs/g77_bugs.html ! 26. http://gcc.gnu.org/onlinedocs/g77_toc.html ! 27. mailto:libc-alpha@sources.redhat.com ! 28. http://gcc.gnu.org/bugs.html#report ! 29. http://www.ncits.org/cplusplus.htm ! 30. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html ! 31. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html ! 32. http://www.validgh.com/goldberg/paper.ps diff -Nrc3pad gcc-3.0/ChangeLog gcc-3.0.1/ChangeLog *** gcc-3.0/ChangeLog Sun Jun 17 12:39:02 2001 --- gcc-3.0.1/ChangeLog Sun Aug 19 14:08:00 2001 *************** *** 1,3 **** --- 1,58 ---- + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-13 Andreas Jaeger + + * configure.in: Disable libgcj on s390*-linux targets. + + 2001-08-10 Ulrich Weigand + + * MAINTAINERS (Various maintainers: s390 port): Added myself + and Hartmut Penner . + + 2001-07-30 Jeff Sturm + + * ltcf-c.sh: Use $objext, not $ac_objext. + + 2001-07-28 Richard Henderson + + * .cvsignore: Add LAST_UPDATED. + + 2001-07-27 Mark Kettenis + + * ltcf-cxx.sh: Add support for GNU. + + 2001-07-22 Timothy Wall + + * ltcf-c.sh: Don't disable shared libraries for AIX5/IA64. Preserve + default settings if using GNU tools with that configuration. + * ltcf-cxx.sh: Ditto. + * ltcf-gcj.sh: Ditto. + + 2001-07-21 Michael Chastain + + * ltconfig: Set max_cmd_len to a maximum of 512Kb, as it seems some + HPUX 11.0 systems have trouble with 1MB. Mark as gcc-local. + * ltmain.sh: Mark as gcc-local. + + 2001-07-16 Aldy Hernandez + + * config.sub: Fix mips64vr5000el typo in CPU-COMPANY. + + 2001-07-12 Stephane Carrez + + * configure.in (noconfigdirs): Don't compile libiberty, libstdcxx + and libgcj on m68hc11/m68hc12. + 20010617 Release Manager * GCC 3.0 Released. *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 373,384 **** 2000-12-18 Benjamin Kosnik ! * Makefile.in (BASE_FLAGS_TO_PASS): Alphabetize. (libstdcxx_incdir): Pass down. * config.if: Remove expired bits for cxx_interface, add stub. (libstdcxx_incdir): Add variable for g++ include directory. * configure.in (gxx_include_dir): Use it. ! 2000-12-18 Alexandre Oliva * MAINTAINERS: Added self as sh port co-maintainer. Removed entry --- 428,439 ---- 2000-12-18 Benjamin Kosnik ! * Makefile.in (BASE_FLAGS_TO_PASS): Alphabetize. (libstdcxx_incdir): Pass down. * config.if: Remove expired bits for cxx_interface, add stub. (libstdcxx_incdir): Add variable for g++ include directory. * configure.in (gxx_include_dir): Use it. ! 2000-12-18 Alexandre Oliva * MAINTAINERS: Added self as sh port co-maintainer. Removed entry *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 395,405 **** * MAINTAINERS: Added gcj developers. 2000-12-13 Anthony Green ! * configure.in: Disable libgcj for any target not specifically ! listed. Disable libgcj for x86 and Alpha Linux until compatible ! with g++ abi. ! 2000-12-13 Mike Stump * Makefile.in (local-distclean): Also remove fastjar. --- 450,460 ---- * MAINTAINERS: Added gcj developers. 2000-12-13 Anthony Green ! * configure.in: Disable libgcj for any target not specifically ! listed. Disable libgcj for x86 and Alpha Linux until compatible ! with g++ abi. ! 2000-12-13 Mike Stump * Makefile.in (local-distclean): Also remove fastjar. *************** Mon Nov 6 14:19:35 2000 Christopher Fa *** 548,554 **** * MAINTAINERS: Rename @cygnus.com addresses to @redhat.com. Also installed new email address for Clint Popetz. ! 2000-10-30 Joseph S. Myers * etc: Remove directory from GCC. --- 603,609 ---- * MAINTAINERS: Rename @cygnus.com addresses to @redhat.com. Also installed new email address for Clint Popetz. ! 2000-10-30 Joseph S. Myers * etc: Remove directory from GCC. *************** Mon Nov 6 14:19:35 2000 Christopher Fa *** 558,565 **** * configure (gcc/configargs.h): Only create if there is a build GCC directory created. ! 2000-10-16 Matthias Klose ! * config.if: Search libstdc++-v3/configure.in for INTERFACE, when configured for libstdc++-v3. --- 613,620 ---- * configure (gcc/configargs.h): Only create if there is a build GCC directory created. ! 2000-10-16 Matthias Klose ! * config.if: Search libstdc++-v3/configure.in for INTERFACE, when configured for libstdc++-v3. *************** Wed Sep 13 11:11:29 2000 Jeffrey A Law *** 697,703 **** * configure.in (libstdcxx_flags): Remove -isystem $$s/libio/stdio. ! * configure: Make enable_threads and enable_shared defaults explicit. Substitute enable_threads into generated Makefiles. * configure.in: Accept *-*-linux* not just *-*-linux-gnu*. * libtool.m4: Accept *-*-linux* not just *-*-linux-gnu*. --- 752,758 ---- * configure.in (libstdcxx_flags): Remove -isystem $$s/libio/stdio. ! * configure: Make enable_threads and enable_shared defaults explicit. Substitute enable_threads into generated Makefiles. * configure.in: Accept *-*-linux* not just *-*-linux-gnu*. * libtool.m4: Accept *-*-linux* not just *-*-linux-gnu*. *************** Wed Sep 13 11:11:29 2000 Jeffrey A Law *** 779,785 **** * libtool.m4, ltcf-c.sh, ltcf-cxx.sh, ltcf-gcj.sh: New files from the libtool CVS tree multi-language branch. * ltconfig, ltmain.sh: Updated. ! 2000-07-27 Alexandre Oliva * Makefile.in (clean-target-libgcc): Remove gcc/libgcc. --- 834,840 ---- * libtool.m4, ltcf-c.sh, ltcf-cxx.sh, ltcf-gcj.sh: New files from the libtool CVS tree multi-language branch. * ltconfig, ltmain.sh: Updated. ! 2000-07-27 Alexandre Oliva * Makefile.in (clean-target-libgcc): Remove gcc/libgcc. *************** Tue May 16 09:57:35 2000 Andrew Cagney *** 902,908 **** Wed Apr 26 17:03:53 2000 Andrew Cagney : * Makefile.in (do-djunpack): New target. Update djunpack.bat with ! current version information. Add to proto-toplev directory. (gdb-taz): Build do-djunpack. 2000-05-15 David Edelsohn --- 957,963 ---- Wed Apr 26 17:03:53 2000 Andrew Cagney : * Makefile.in (do-djunpack): New target. Update djunpack.bat with ! current version information. Add to proto-toplev directory. (gdb-taz): Build do-djunpack. 2000-05-15 David Edelsohn *************** Sat May 6 21:12:55 CDT 2000 Jason Eckh *** 946,954 **** Wed Apr 19 12:46:26 2000 Andrew Cagney * Makefile.in (taz, gdb-taz, gas.tar.bz2, binutils.tar.bz2, ! gas+binutils.tar.bz2, libg++.tar.bz2, gnats.tar.bz2, gdb.tar.bz2, ! dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, insight.tar.bz2, ! insight+dejagnu.tar.bz2, newlib.tar.bz2): Pass MD5PROG to sub-make. 2000-04-16 Dave Pitts --- 1001,1009 ---- Wed Apr 19 12:46:26 2000 Andrew Cagney * Makefile.in (taz, gdb-taz, gas.tar.bz2, binutils.tar.bz2, ! gas+binutils.tar.bz2, libg++.tar.bz2, gnats.tar.bz2, gdb.tar.bz2, ! dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, insight.tar.bz2, ! insight+dejagnu.tar.bz2, newlib.tar.bz2): Pass MD5PROG to sub-make. 2000-04-16 Dave Pitts *************** Wed Apr 12 16:42:48 2000 Andrew Cagney *** 967,977 **** (PACKAGE): Default to TOOL. (VER): Default to a shell script. (taz): Rewrite target. Move real work to do-proto-toplev. Include ! md5 checksum generation. (do-proto-toplev): New target. Create $(PACKAGE)-$(VER) link. (do-tar-bz2): Delete creation of $(PACKAGE)-$(VER) link. (gdb.tar.bz2, dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, ! insight.tar.bz2): Use gdb-taz to create archive. Fri Apr 7 18:10:29 2000 Andrew Cagney --- 1022,1032 ---- (PACKAGE): Default to TOOL. (VER): Default to a shell script. (taz): Rewrite target. Move real work to do-proto-toplev. Include ! md5 checksum generation. (do-proto-toplev): New target. Create $(PACKAGE)-$(VER) link. (do-tar-bz2): Delete creation of $(PACKAGE)-$(VER) link. (gdb.tar.bz2, dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, ! insight.tar.bz2): Use gdb-taz to create archive. Fri Apr 7 18:10:29 2000 Andrew Cagney *************** Fri Mar 3 18:44:08 2000 Andrew Cagney *** 1016,1022 **** (do-tar-bz2): Replace TOOL with PACKAGE. (gdb.tar.bz2): Remove GDBTK from GDB package. (gdb+dejagnu.tar.bz2, insight.tar.bz2, insight+dejagnu.tar.bz2, ! dejagnu.tar.bz2): New packages. 2000-02-27 Andreas Jaeger --- 1071,1077 ---- (do-tar-bz2): Replace TOOL with PACKAGE. (gdb.tar.bz2): Remove GDBTK from GDB package. (gdb+dejagnu.tar.bz2, insight.tar.bz2, insight+dejagnu.tar.bz2, ! dejagnu.tar.bz2): New packages. 2000-02-27 Andreas Jaeger *************** Fri Mar 3 18:44:08 2000 Andrew Cagney *** 1034,1040 **** Thu Feb 24 16:15:56 2000 Andrew Cagney * config.guess, config.sub: Updated to match config's 2000-02-15 ! version. 2000-02-23 Linas Vepstas --- 1089,1095 ---- Thu Feb 24 16:15:56 2000 Andrew Cagney * config.guess, config.sub: Updated to match config's 2000-02-15 ! version. 2000-02-23 Linas Vepstas *************** Wed Mar 10 18:35:07 1999 Jeff Johnston *** 1395,1401 **** Wed Mar 10 17:39:09 1999 Drew Moseley * configure.in: Added bsp support to arm-*-coff and arm-*-elf ! targets. 1999-03-02 Nick Clifton --- 1450,1456 ---- Wed Mar 10 17:39:09 1999 Drew Moseley * configure.in: Added bsp support to arm-*-coff and arm-*-elf ! targets. 1999-03-02 Nick Clifton *************** Thu Dec 17 01:22:30 1998 Jeffrey A Law *** 1523,1529 **** Tue Dec 15 17:02:58 1998 Bob Manson * configure.in: Add cygmon for x86-coff and x86-elf. Configure ! cygmon for all sparclite targets, regardless of object format. 1998-12-15 Mark Salter --- 1578,1584 ---- Tue Dec 15 17:02:58 1998 Bob Manson * configure.in: Add cygmon for x86-coff and x86-elf. Configure ! cygmon for all sparclite targets, regardless of object format. 1998-12-15 Mark Salter *************** Sat Jun 27 22:46:32 1998 Jeffrey A Law *** 1910,1916 **** Wed Jun 24 16:01:59 1998 John Metzler * configure.in (noconfigdirs): Add configure pattern for mips tx39 ! cygmon Tue Jun 23 22:42:32 1998 Mark Alexander --- 1965,1971 ---- Wed Jun 24 16:01:59 1998 John Metzler * configure.in (noconfigdirs): Add configure pattern for mips tx39 ! cygmon Tue Jun 23 22:42:32 1998 Mark Alexander *************** Mon Sep 29 00:38:08 1997 Aaron Jackson < *** 2562,2568 **** Wed Sep 24 18:06:27 1997 Stu Grossman * configure.in (d30v): Remove tcl, tk, expect, gdb, itcl, tix, db, ! sn, and gnuserv from noconfigdirs. Wed Sep 24 15:18:32 1997 Ian Lance Taylor --- 2617,2623 ---- Wed Sep 24 18:06:27 1997 Stu Grossman * configure.in (d30v): Remove tcl, tk, expect, gdb, itcl, tix, db, ! sn, and gnuserv from noconfigdirs. Wed Sep 24 15:18:32 1997 Ian Lance Taylor *************** Thu Sep 18 21:43:23 1997 Alexandre Oliv *** 2582,2588 **** Thu Sep 18 15:37:42 1997 Andrew Cagney * configure (tooldir): enable_gdbtk=YES for cygwin32, NO for ! windows. Consistent with gdb/configure. 1997-09-15 02:37 Ulrich Drepper --- 2637,2643 ---- Thu Sep 18 15:37:42 1997 Andrew Cagney * configure (tooldir): enable_gdbtk=YES for cygwin32, NO for ! windows. Consistent with gdb/configure. 1997-09-15 02:37 Ulrich Drepper *************** Tue Aug 5 12:12:44 1997 Andrew Cagney *** 2763,2775 **** Mon Aug 4 22:59:02 1997 Andrew Cagney * Makefile.in (CC_FOR_TARGET): When winsup/Makefile present, ! correctly specify the target build directory $(TARGET_SUBDIR)/winsup ! for libraries. Mon Aug 4 12:40:24 1997 Jason Merrill * Makefile.in (EXTRA_GCC_FLAGS): Fix handling of macros with values ! separated by spaces. Thu Jul 31 19:49:49 1997 Ian Lance Taylor --- 2818,2830 ---- Mon Aug 4 22:59:02 1997 Andrew Cagney * Makefile.in (CC_FOR_TARGET): When winsup/Makefile present, ! correctly specify the target build directory $(TARGET_SUBDIR)/winsup ! for libraries. Mon Aug 4 12:40:24 1997 Jason Merrill * Makefile.in (EXTRA_GCC_FLAGS): Fix handling of macros with values ! separated by spaces. Thu Jul 31 19:49:49 1997 Ian Lance Taylor *************** Mon Jun 16 11:11:10 1997 Ian Lance Tayl *** 2900,2906 **** $(DEFAULT_YACC). * configure.in: Build itl, db, sn, etc., when building for native ! cygwin32. * Makefile.in (LD): New variable. (EXTRA_HOST_FLAGS): Pass down LD. --- 2955,2961 ---- $(DEFAULT_YACC). * configure.in: Build itl, db, sn, etc., when building for native ! cygwin32. * Makefile.in (LD): New variable. (EXTRA_HOST_FLAGS): Pass down LD. *************** Mon Jun 16 11:10:35 1997 Philip Blundel *** 2913,2919 **** Fri Jun 13 10:22:56 1997 Bob Manson * configure.in (targargs): Strip out any supplied --build argument ! before adding our own. Always add --build. Thu Jun 12 21:12:28 1997 Bob Manson --- 2968,2974 ---- Fri Jun 13 10:22:56 1997 Bob Manson * configure.in (targargs): Strip out any supplied --build argument ! before adding our own. Always add --build. Thu Jun 12 21:12:28 1997 Bob Manson *************** Tue Feb 25 18:46:14 1997 Stan Shebs * configure.in (noconfigdirs): Disable target-newlib, ! target-examples and target-libiberty for d30v. Fri Feb 21 17:56:25 1997 Martin M. Hunt --- 3163,3169 ---- Tue Feb 25 13:19:14 1997 Andrew Cagney * configure.in (noconfigdirs): Disable target-newlib, ! target-examples and target-libiberty for d30v. Fri Feb 21 17:56:25 1997 Martin M. Hunt *************** Fri Feb 21 20:58:51 1997 Michael Meissn *** 3121,3127 **** Sun Feb 16 15:41:09 1997 Andrew Cagney * configure.in (d30v-*): Remove sim directory from list of ! unsupported d30v directories Tue Feb 18 17:32:42 1997 Martin M. Hunt --- 3176,3182 ---- Sun Feb 16 15:41:09 1997 Andrew Cagney * configure.in (d30v-*): Remove sim directory from list of ! unsupported d30v directories Tue Feb 18 17:32:42 1997 Martin M. Hunt *************** Fri Nov 8 11:34:58 1996 David J. MacKe *** 3304,3310 **** LynxOs is not a hardware supplier. * config.guess: Contributions from bug-gnu-utils to add support for: ! OpenBSD like NetBSD. Stratus systems. More Pyramid systems. i[n>4]86 Intel chips. --- 3359,3365 ---- LynxOs is not a hardware supplier. * config.guess: Contributions from bug-gnu-utils to add support for: ! OpenBSD like NetBSD. Stratus systems. More Pyramid systems. i[n>4]86 Intel chips. *************** Wed Oct 2 15:52:36 1996 Klaus Kaempf *** 3445,3451 **** Tue Oct 1 01:28:41 1996 James G. Smith * configure.in (noconfigdirs): Don't build libgloss for arm-coff ! targets. Mon Sep 30 14:24:01 1996 Stan Shebs --- 3500,3506 ---- Tue Oct 1 01:28:41 1996 James G. Smith * configure.in (noconfigdirs): Don't build libgloss for arm-coff ! targets. Mon Sep 30 14:24:01 1996 Stan Shebs *************** Sun Jun 23 22:41:54 1996 Geoffrey Noer *** 3672,3678 **** Sat Jun 22 11:39:01 1996 Jason Merrill * Makefile.in (TARGET_SUBDIR): Move comment to previous line so we ! don't get ". ". Fri Jun 21 17:24:48 1996 Jim Wilson --- 3727,3733 ---- Sat Jun 22 11:39:01 1996 Jason Merrill * Makefile.in (TARGET_SUBDIR): Move comment to previous line so we ! don't get ". ". Fri Jun 21 17:24:48 1996 Jim Wilson *************** Fri Dec 29 07:56:11 1995 Michael Meissn *** 4119,4125 **** * Makefile.in (EXTRA_GCC_FLAGS): If any of the make variables LANGUAGES, BOOT_CFLAGS, STMP_FIXPROTO, LIMITS_H_TEST, LIBGCC1_TEST, LIBGCC2_CFLAGS, LIBGCC2_INCLUDES, and ENQUIRE are ! non-empty, pass them on to the GCC make. (all-bootstrap): New rule that is like all-gcc, except it executes the GCC bootstrap rule instead of the GCC all rule. --- 4174,4180 ---- * Makefile.in (EXTRA_GCC_FLAGS): If any of the make variables LANGUAGES, BOOT_CFLAGS, STMP_FIXPROTO, LIMITS_H_TEST, LIBGCC1_TEST, LIBGCC2_CFLAGS, LIBGCC2_INCLUDES, and ENQUIRE are ! non-empty, pass them on to the GCC make. (all-bootstrap): New rule that is like all-gcc, except it executes the GCC bootstrap rule instead of the GCC all rule. *************** Mon Dec 4 12:38:15 1995 Ian Lance Tayl *** 4199,4205 **** Thu Nov 30 14:45:25 1995 J.T. Conklin * config/mt-v810 (CC_FOR_TARGET): Add -ansi flag. NEC compiler ! defaults to K&R mode, but doesn't have varargs.h, so we have to compile in ANSI mode. Thu Nov 30 16:57:33 1995 Per Bothner --- 4254,4260 ---- Thu Nov 30 14:45:25 1995 J.T. Conklin * config/mt-v810 (CC_FOR_TARGET): Add -ansi flag. NEC compiler ! defaults to K&R mode, but doesn't have varargs.h, so we have to compile in ANSI mode. Thu Nov 30 16:57:33 1995 Per Bothner *************** Mon Nov 13 12:34:20 1995 Stan Shebs * configure: CXX defaults to gcc, not g++. If we find ! gcc in the path, set CC to gcc -O2. Tue Nov 7 15:45:17 1995 Ian Lance Taylor --- 4366,4380 ---- * mpw-config.in: Configure grez if targeting Mac. * config.sub: Accept pmac and pmac-mpw as names for PowerMacs, ! accept mpw and mac-mpw as names for m68k Macs, change macos7 to ! just macos. * configure.in: Configure grez resource compiler if targeting Mac. * Makefile.in (all-grez, install-grez): New targets. Wed Nov 8 17:33:51 1995 Jason Merrill * configure: CXX defaults to gcc, not g++. If we find ! gcc in the path, set CC to gcc -O2. Tue Nov 7 15:45:17 1995 Ian Lance Taylor *************** Wed Nov 1 12:23:20 1995 Ian Lance Tayl *** 4369,4376 **** Tue Oct 31 17:52:39 1995 J.T. Conklin * configure.in (host_makefile_frag): Use m68k-sun-sunos* instead ! of m68k-sun-* when selecting mh-sun3 to avoid matching NetBSD/sun3 ! systems. Tue Oct 31 16:57:32 1995 Jim Wilson --- 4424,4431 ---- Tue Oct 31 17:52:39 1995 J.T. Conklin * configure.in (host_makefile_frag): Use m68k-sun-sunos* instead ! of m68k-sun-* when selecting mh-sun3 to avoid matching NetBSD/sun3 ! systems. Tue Oct 31 16:57:32 1995 Jim Wilson *************** Thu Sep 7 20:03:41 1995 Ken Raeburn < *** 4648,4654 **** Fri Sep 1 08:06:58 1995 James G. Smith * config.sub: recognise mips64vr4300 and mips64vr4300el as valid ! targets. Wed Aug 30 21:06:50 1995 Jason Molenda (crash@phydeaux.cygnus.com) --- 4703,4709 ---- Fri Sep 1 08:06:58 1995 James G. Smith * config.sub: recognise mips64vr4300 and mips64vr4300el as valid ! targets. Wed Aug 30 21:06:50 1995 Jason Molenda (crash@phydeaux.cygnus.com) *************** Tue Apr 26 18:11:33 1994 Ian Lance Tayl *** 5642,5649 **** Mon Apr 25 15:06:34 1994 Stan Shebs (shebs@andros.cygnus.com) ! * configure.in (*-*-lynxos*): Don't configure newlib for either ! native or cross Lynx. Sat Apr 16 11:58:16 1994 Doug Evans (dje@canuck.cygnus.com) --- 5697,5704 ---- Mon Apr 25 15:06:34 1994 Stan Shebs (shebs@andros.cygnus.com) ! * configure.in (*-*-lynxos*): Don't configure newlib for either ! native or cross Lynx. Sat Apr 16 11:58:16 1994 Doug Evans (dje@canuck.cygnus.com) *************** Thu Aug 27 13:04:42 1992 Brendan Kehoe *** 7388,7394 **** Mon Aug 24 14:05:14 1992 Ian Lance Taylor (ian@cygnus.com) ! * config.sub, configure.in: accept OSE68000 and OSE68k. * Makefile.in: don't create all directories for ``make install''; let the subdirectories create the ones they need. --- 7443,7449 ---- Mon Aug 24 14:05:14 1992 Ian Lance Taylor (ian@cygnus.com) ! * config.sub, configure.in: accept OSE68000 and OSE68k. * Makefile.in: don't create all directories for ``make install''; let the subdirectories create the ones they need. diff -Nrc3pad gcc-3.0/FAQ gcc-3.0.1/FAQ *** gcc-3.0/FAQ Sun Jun 17 12:50:01 2001 --- gcc-3.0.1/FAQ Sun Aug 19 17:45:10 2001 *************** *** 35,61 **** 1. [24]Unable to run the testsuite 2. [25]How do I pass flags like -fnew-abi to the testsuite? 3. [26]How can I run the test suite with multiple options? ! 4. [27]Bugs and Non-Bugs ! 1. [28]Why can't I initialize a static variable with stdin? ! 2. [29]Why can't I use #if here? ! 3. [30]Problems with floating point computations ! 5. [31]Older versions of GCC or EGCS ! ! 1. [32]Why is there no testsuite in GCC 2.95? ! 2. [33]Is there a stringstream / sstream for gcc 2.95.2? ! ! [34]Miscellaneous ! 1. [35]Virtual memory exhausted ! 2. [36]Friend Templates ! 3. [37]Why do I need autoconf, bison, xgettext, automake, etc? ! 4. [38]Problems debugging GCC code ! 5. [39]Using GCC with GNAT/Ada ! 6. [40]Why can't I build a shared library? ! 7. [41]How to work around too long C++ symbol names? (-fsquangle) ! 8. [42]When building C++, the linker says my constructors, ! destructors or virtual tables are undefined, but I defined them ! 9. [43]What is libstdc++-v3 and how can I use it with g++? ! 10. [44]Will GCC someday include an incremental linker? _________________________________________________________________ General information --- 35,57 ---- 1. [24]Unable to run the testsuite 2. [25]How do I pass flags like -fnew-abi to the testsuite? 3. [26]How can I run the test suite with multiple options? ! 4. [27]Older versions of GCC or EGCS ! 1. [28]Why is there no testsuite in GCC 2.95? ! 2. [29]Is there a stringstream / sstream for gcc 2.95.2? ! 5. [30]Miscellaneous ! 1. [31]Virtual memory exhausted ! 2. [32]Friend Templates ! 3. [33]Why do I need autoconf, bison, xgettext, automake, etc? ! 4. [34]Problems debugging GCC code ! 5. [35]Using GCC with GNAT/Ada ! 6. [36]Why can't I build a shared library? ! 7. [37]How to work around too long C++ symbol names? ! (-fsquangle) ! 8. [38]When building C++, the linker says my constructors, ! destructors or virtual tables are undefined, but I defined ! them ! 9. [39]What is libstdc++-v3 and how can I use it with g++? ! 10. [40]Will GCC someday include an incremental linker? _________________________________________________________________ General information *************** What is the relationship between GCC and *** 77,83 **** development on the gcc2 compiler and appointed the EGCS project as the official GCC maintainers. The net result was a single project which carries forward GCC development under the ultimate control of the ! [45]GCC Steering Committee. _________________________________________________________________ What is the relationship between GCC and Cygnus / Red Hat? --- 73,79 ---- development on the gcc2 compiler and appointed the EGCS project as the official GCC maintainers. The net result was a single project which carries forward GCC development under the ultimate control of the ! [41]GCC Steering Committee. _________________________________________________________________ What is the relationship between GCC and Cygnus / Red Hat? *************** What is the relationship between GCC and *** 88,94 **** While Red Hat does donate hardware, network connections, code and developer time to GCC development, Red Hat does not control GCC. ! Overall control of GCC is in the hands of the [46]GCC Steering Committee which includes people from a variety of different organizations and backgrounds. The purpose of the steering committee is to make decisions in the best interest of GCC and to help ensure --- 84,90 ---- While Red Hat does donate hardware, network connections, code and developer time to GCC development, Red Hat does not control GCC. ! Overall control of GCC is in the hands of the [42]GCC Steering Committee which includes people from a variety of different organizations and backgrounds. The purpose of the steering committee is to make decisions in the best interest of GCC and to help ensure *************** What is the relationship between GCC and *** 100,106 **** What is an open development model? ! We are using a bazaar style [47][1] approach to GCC development: we make snapshots publicly available to anyone who wants to try them; we welcome anyone to join the development mailing list. All of the discussions on the development mailing list are available via the web. --- 96,102 ---- What is an open development model? ! We are using a bazaar style [43][1] approach to GCC development: we make snapshots publicly available to anyone who wants to try them; we welcome anyone to join the development mailing list. All of the discussions on the development mailing list are available via the web. *************** What is an open development model? *** 138,150 **** the past few months. The paper which started all of this introduced two terms: A cathedral development model versus a bazaar development model. The paper is written by Eric S. Raymond, it is ! called ``[48]The Cathedral and the Bazaar''. The paper is a useful starting point for discussions. _________________________________________________________________ How do I report a bug? ! There are complete instructions [49]here. _________________________________________________________________ How do I get a bug fixed or a feature added? --- 134,146 ---- the past few months. The paper which started all of this introduced two terms: A cathedral development model versus a bazaar development model. The paper is written by Eric S. Raymond, it is ! called ``[44]The Cathedral and the Bazaar''. The paper is a useful starting point for discussions. _________________________________________________________________ How do I report a bug? ! There are complete instructions [45]here. _________________________________________________________________ How do I get a bug fixed or a feature added? *************** How do I get a bug fixed or a feature ad *** 166,172 **** commercial support organization since the people who read gcc-bugs, if they choose to help you, will be volunteering their time. This alternative will work best if you follow the directions ! on [50]submitting bugreports. * Fix it yourself. This alternative will probably bring results, if you work hard enough, but will probably take a lot of time, and, depending on the quality of your work and the perceived benefits --- 162,168 ---- commercial support organization since the people who read gcc-bugs, if they choose to help you, will be volunteering their time. This alternative will work best if you follow the directions ! on [46]submitting bugreports. * Fix it yourself. This alternative will probably bring results, if you work hard enough, but will probably take a lot of time, and, depending on the quality of your work and the perceived benefits *************** How do I get a bug fixed or a feature ad *** 177,183 **** How can I get a development environment for GCC without using CVS? GCC snapshots are available from the FTP server and its mirrors; see ! the [51]GCC mirror list. _________________________________________________________________ Installation --- 173,179 ---- How can I get a development environment for GCC without using CVS? GCC snapshots are available from the FTP server and its mirrors; see ! the [47]GCC mirror list. _________________________________________________________________ Installation *************** How to install multiple versions of GCC *** 229,249 **** is that the sed command invariably contains characters significant to the shell, and these have to be escaped correctly, also it is not possible to use "^" or "$" in the command. Here is the option to ! prefix "new-" to the new GCC installed programs ! "--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'". With the above ! --prefix option, that will install the new GCC programs into ! /usr/local/gcc/bin with names prefixed by "new-". You can use --program-transform-name if you have multiple versions of GCC, and wish to be sure about which version you are invoking. If you use --prefix, GCC may have difficulty locating a GNU assembler ! or linker on your system, [52]GCC can not find GNU as/GNU ld explains how to deal with this. Another option that may be easier is to use the --program-prefix= or --program-suffix= options to configure. So if you're installing GCC 2.95.2 and don't want to disturb the current version of GCC in ! /usr/local/bin/, you could do 'configure --program-suffix=-2.95.2 '. This should result in GCC being installed as /usr/local/bin/gcc-2.95.2 instead of /usr/local/bin/gcc. _________________________________________________________________ --- 225,250 ---- is that the sed command invariably contains characters significant to the shell, and these have to be escaped correctly, also it is not possible to use "^" or "$" in the command. Here is the option to ! prefix "new-" to the new GCC installed programs: ! ! --program-transform-name='s,\\\\(.*\\\\),new-\\\\1,' ! ! With the above --prefix option, that will install the new GCC programs ! into /usr/local/gcc/bin with names prefixed by "new-". You can use --program-transform-name if you have multiple versions of GCC, and wish to be sure about which version you are invoking. If you use --prefix, GCC may have difficulty locating a GNU assembler ! or linker on your system, [48]GCC can not find GNU as/GNU ld explains how to deal with this. Another option that may be easier is to use the --program-prefix= or --program-suffix= options to configure. So if you're installing GCC 2.95.2 and don't want to disturb the current version of GCC in ! /usr/local/bin/, you could do ! ! configure --program-suffix=-2.95.2 ! This should result in GCC being installed as /usr/local/bin/gcc-2.95.2 instead of /usr/local/bin/gcc. _________________________________________________________________ *************** GCC can not find GNU as/GNU ld *** 300,306 **** versions of those programs. To ensure that GCC finds the GNU assembler (the GNU loader), which are ! required by [53]some configurations, you should configure these with the same --prefix option as you used for GCC. Then build & install GNU as (GNU ld) and proceed with building GCC. --- 301,307 ---- versions of those programs. To ensure that GCC finds the GNU assembler (the GNU loader), which are ! required by [49]some configurations, you should configure these with the same --prefix option as you used for GCC. Then build & install GNU as (GNU ld) and proceed with building GCC. *************** Unable to run the testsuite *** 354,360 **** If you get a message about unable to find "standard.exp" when trying to run the GCC testsuites, then your dejagnu is too old to run the GCC tests. You will need to get a newer version of dejagnu from ! [54]http://www.gnu.org/software/dejagnu/dejagnu.html. _________________________________________________________________ How do I pass flags like -fnew-abi to the testsuite? --- 355,361 ---- If you get a message about unable to find "standard.exp" when trying to run the GCC testsuites, then your dejagnu is too old to run the GCC tests. You will need to get a newer version of dejagnu from ! [50]http://www.gnu.org/software/dejagnu/dejagnu.html. _________________________________________________________________ How do I pass flags like -fnew-abi to the testsuite? *************** How can I run the test suite with multip *** 384,521 **** This technique is particularly useful on multilibbed targets. _________________________________________________________________ - Bugs and Non-Bugs - - Unfortunately, improvements in tools that are widely used are sooner - or later bound to break something. Sometimes, the code that breaks was - wrong, and then that code should be fixed, even if it works for - earlier versions of GCC or other compilers. The following problems - with some releases of widely used packages have been identified: - - There is a separate [55]list of well-known bugs describing known - deficiencies. Naturally we'd like that list to be of zero length. - - To report a bug, see [56]How to report bugs. - _________________________________________________________________ - - Why can't I initialize a static variable with stdin? - - This has nothing to do with GCC, but people ask us about it a lot. - Code like this: - #include - - FILE *yyin = stdin; - - will not compile with GNU libc (Linux libc6), because stdin is not a - constant. This was done deliberately, in order for there to be no - limit on the number of open FILE objects. It is surprising for people - used to traditional Unix C libraries, but it is permitted by the C - standard. - - This construct commonly occurs in code generated by old versions of - lex or yacc. We suggest you try regenerating the parser with a current - version of flex or bison, respectively. In your own code, the - appropriate fix is to move the initialization to the beginning of - main. - - There is a common misconception that the GCC developers are - responsible for GNU libc. These are in fact two entirely separate - projects. The appropriate place to ask questions relating to GNU libc - is [57]libc-alpha@sources.redhat.com. - _________________________________________________________________ - - Why can't I use #if here? - - Let me guess... you wrote code that looks something like this: - memcpy(dest, src, - #ifdef PLATFORM1 - 12 - #else - 24 - #endif - ); - - and you got a whole pile of error messages: - test.c:11: warning: preprocessing directive not recognized within macro arg - test.c:11: warning: preprocessing directive not recognized within macro arg - test.c:11: warning: preprocessing directive not recognized within macro arg - test.c: In function `foo': - test.c:6: undefined or invalid # directive - test.c:8: undefined or invalid # directive - test.c:9: parse error before `24' - test.c:10: undefined or invalid # directive - test.c:11: parse error before `#' - - The problem, simply put, is that GCC's preprocessor does not allow you - to put #ifdef (or any other directive) inside the arguments of a - macro. Your C library's string.h happens to define memcpy as a macro - - this is perfectly legitimate. The code therefore will not compile. - - We have two good reasons for not allowing directives inside macro - arguments. First, it is not portable. It is "undefined behavior" - according to the C standard; that means different compilers will do - different things with it. Some will give you errors. Some will dump - core. Some will silently mangle your code - you could get the - equivalent of - memcpy(dest, src, 1224); - - from the above example. A very few might do what you expected it to. - We therefore feel it is most useful for GCC to reject this construct - immediately so that it is found and fixed. - - Second, it is extraordinarily difficult to implement the preprocessor - such that it does what you would expect for every possible directive - found inside a macro argument. The best example is perhaps - #define foo(arg) ... arg ... - foo(blah - #undef foo - blah) - - which is impossible to implement in portable C without leaking memory. - Allowing only a subset of directives would be confusing. - - It is always possible to rewrite code which uses conditionals inside - macros so that it doesn't. You could write the above example - #ifdef PLATFORM1 - memcpy(dest, src, 12); - #else - memcpy(dest, src, 24); - #endif - - This is a bit more typing, but I personally think it's better style in - addition to being more portable. - - In recent versions of glibc, printf is among the functions which are - implemented as macros. - - Problems with floating point computations - - In a number of cases, GCC appears to perform floating point - computations incorrectly. For example, the program - #include - - int main() { - - double min = 0.0; - double max = 0.5; - double width = 0.01; - std::cout << (int)(((max - min) / width) - 1) << std::endl; - - } - - might print 50 on some systems and optimization levels, and 51 on - others. - - The is the result of rounding: The computer cannot represent all real - numbers exactly, so it has to use approximations. When computing with - approximation, the computer needs to round to the nearest - representable number. - - This is not a bug in the compiler, but an inherent limitation of the - float and double types. Please study [58]this paper for more - information. - _________________________________________________________________ - Older versions of GCC and EGCS Why is there no testsuite in GCC 2.95? --- 385,390 ---- *************** Why is there no testsuite in GCC 2.95? *** 532,538 **** Is there a stringstream / sstream for gcc 2.95.2? Yes, it's at: ! [59]http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream. _________________________________________________________________ Miscellaneous --- 401,407 ---- Is there a stringstream / sstream for gcc 2.95.2? Yes, it's at: ! [51]http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream. _________________________________________________________________ Miscellaneous *************** Why do I need autoconf, bison, xgettext, *** 625,634 **** rebuild GCC. In general, the current versions of these tools from ! [60]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not supported, and you will need to use Autoconf 2.13; work is in progress to fix this problem. Also look at ! [61]ftp://gcc.gnu.org/pub/gcc/infrastructure/ for any special versions of packages. _________________________________________________________________ --- 494,503 ---- rebuild GCC. In general, the current versions of these tools from ! [52]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not supported, and you will need to use Autoconf 2.13; work is in progress to fix this problem. Also look at ! [53]ftp://gcc.gnu.org/pub/gcc/infrastructure/ for any special versions of packages. _________________________________________________________________ *************** tables are undefined, but I defined them *** 718,724 **** What is libstdc++-v3 and how can I use it with g++? ! From the [62]libstdc++-v3 FAQ: "The GNU Standard C++ Library v3, or libstdc++-2.9x, is an ongoing project to implement the ISO 14882 Standard C++ library as described in chapters 17 through 27 and annex D." --- 587,593 ---- What is libstdc++-v3 and how can I use it with g++? ! From the [54]libstdc++-v3 FAQ: "The GNU Standard C++ Library v3, or libstdc++-2.9x, is an ongoing project to implement the ISO 14882 Standard C++ library as described in chapters 17 through 27 and annex D." *************** References *** 761,799 **** 24. http://gcc.gnu.org/faq.html#dejagnu 25. http://gcc.gnu.org/faq.html#testoptions 26. http://gcc.gnu.org/faq.html#multipletests ! 27. http://gcc.gnu.org/faq.html#bugs ! 28. http://gcc.gnu.org/faq.html#stdin ! 29. http://gcc.gnu.org/faq.html#macarg ! 30. http://gcc.gnu.org/faq.html#rounding ! 31. http://gcc.gnu.org/faq.html#old ! 32. http://gcc.gnu.org/faq.html#2.95suite ! 33. http://gcc.gnu.org/faq.html#2.95sstream ! 34. http://gcc.gnu.org/faq.html#misc ! 35. http://gcc.gnu.org/faq.html#memexhausted ! 36. http://gcc.gnu.org/faq.html#friend ! 37. http://gcc.gnu.org/faq.html#generated_files ! 38. http://gcc.gnu.org/faq.html#gdb ! 39. http://gcc.gnu.org/faq.html#gnat ! 40. http://gcc.gnu.org/faq.html#picflag-needed ! 41. http://gcc.gnu.org/faq.html#squangle ! 42. http://gcc.gnu.org/faq.html#vtables ! 43. http://gcc.gnu.org/faq.html#libstdc++ ! 44. http://gcc.gnu.org/faq.html#incremental ! 45. http://gcc.gnu.org/steering.html ! 46. http://gcc.gnu.org/steering.html ! 47. http://gcc.gnu.org/faq.html#cathedral-vs-bazaar ! 48. http://www.tuxedo.org/~esr/writings/cathedral-bazaar/ ! 49. http://gcc.gnu.org/bugs.html ! 50. http://gcc.gnu.org/bugs.html ! 51. http://gcc.gnu.org/mirrors.html ! 52. http://gcc.gnu.org/faq.html#gas ! 53. http://gcc.gnu.org/install/specific.html ! 54. http://www.gnu.org/software/dejagnu/dejagnu.html ! 55. http://gcc.gnu.org/bugs.html#known ! 56. http://gcc.gnu.org/bugs.html ! 57. mailto:libc-alpha@sources.redhat.com ! 58. http://www.validgh.com/goldberg/paper.ps ! 59. http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream ! 60. ftp://ftp.gnu.org/gnu/ ! 61. ftp://gcc.gnu.org/pub/gcc/infrastructure/ ! 62. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html --- 630,660 ---- 24. http://gcc.gnu.org/faq.html#dejagnu 25. http://gcc.gnu.org/faq.html#testoptions 26. http://gcc.gnu.org/faq.html#multipletests ! 27. http://gcc.gnu.org/faq.html#old ! 28. http://gcc.gnu.org/faq.html#2.95suite ! 29. http://gcc.gnu.org/faq.html#2.95sstream ! 30. http://gcc.gnu.org/faq.html#misc ! 31. http://gcc.gnu.org/faq.html#memexhausted ! 32. http://gcc.gnu.org/faq.html#friend ! 33. http://gcc.gnu.org/faq.html#generated_files ! 34. http://gcc.gnu.org/faq.html#gdb ! 35. http://gcc.gnu.org/faq.html#gnat ! 36. http://gcc.gnu.org/faq.html#picflag-needed ! 37. http://gcc.gnu.org/faq.html#squangle ! 38. http://gcc.gnu.org/faq.html#vtables ! 39. http://gcc.gnu.org/faq.html#libstdc++ ! 40. http://gcc.gnu.org/faq.html#incremental ! 41. http://gcc.gnu.org/steering.html ! 42. http://gcc.gnu.org/steering.html ! 43. http://gcc.gnu.org/faq.html#cathedral-vs-bazaar ! 44. http://www.tuxedo.org/~esr/writings/cathedral-bazaar/ ! 45. http://gcc.gnu.org/bugs.html ! 46. http://gcc.gnu.org/bugs.html ! 47. http://gcc.gnu.org/mirrors.html ! 48. http://gcc.gnu.org/faq.html#gas ! 49. http://gcc.gnu.org/install/specific.html ! 50. http://www.gnu.org/software/dejagnu/dejagnu.html ! 51. http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream ! 52. ftp://ftp.gnu.org/gnu/ ! 53. ftp://gcc.gnu.org/pub/gcc/infrastructure/ ! 54. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html diff -Nrc3pad gcc-3.0/GNATS gcc-3.0.1/GNATS *** gcc-3.0/GNATS Sun Jun 17 12:50:02 2001 --- gcc-3.0.1/GNATS Sun Aug 19 17:45:10 2001 *************** *** 1,15 **** gccbug and gnatsweb ! [1]GNATS is the GNU bug tracking system, and it is now used to track ! GCC bug reports, as well. Before submitting a bug report, please read ! the [2]general instructions. The preferred way of submitting a bug report is by means of the gccbug program that is automatically installed with current versions of GCC and submits the bug report by e-mail. ! If this is not possible, please use the [3]gnatsweb interface. Make sure you include an e-mail address, so we can inform you when the status of your report changes. --- 1,15 ---- gccbug and gnatsweb ! GNATS is the GNU bug tracking system, and it is now used to track GCC ! bug reports, as well. Before submitting a bug report, please read the ! [1]general instructions. The preferred way of submitting a bug report is by means of the gccbug program that is automatically installed with current versions of GCC and submits the bug report by e-mail. ! If this is not possible, please use the [2]gnatsweb interface. Make sure you include an e-mail address, so we can inform you when the status of your report changes. *************** *** 178,183 **** References ! 1. http://sources.redhat.com/gnats/ ! 2. http://gcc.gnu.org/bugs.html ! 3. http://gcc.gnu.org/cgi-bin/gnatsweb.pl?database=gcc&user=guest&password=guest&cmd=login --- 178,182 ---- References ! 1. http://gcc.gnu.org/bugs.html ! 2. http://gcc.gnu.org/cgi-bin/gnatsweb.pl?database=gcc&user=guest&password=guest&cmd=login diff -Nrc3pad gcc-3.0/INSTALL/binaries.html gcc-3.0.1/INSTALL/binaries.html *** gcc-3.0/INSTALL/binaries.html Sun Jun 17 12:50:02 2001 --- gcc-3.0.1/INSTALL/binaries.html Sun Aug 19 17:45:11 2001 *************** *** 8,14 ****

Installing GCC: Binaries

!

We are often asked about pre-compiled versions of GCC. While we cannot provide these for all platforms, below you'll find links to binaries for various platforms where creating them by yourself is not easy due to various reasons. --- 8,14 ----

Installing GCC: Binaries

!

We are often asked about pre-compiled versions of GCC. While we cannot provide these for all platforms, below you'll find links to binaries for various platforms where creating them by yourself is not easy due to various reasons. *************** contact their makers. *** 20,28 ****

! Note that these rules do not check for the value of PATH. You may want to use --with-as if no assembler is installed in the directories listed above, or if you have multiple assemblers installed and want to choose one that is not found by the above rules. *************** and want to choose one that is not found *** 204,210 ****
Same as --with-gnu-as but for linker. !
--with-ld=/path/to/ld
Same as --with-as, but for the linker. --- 228,234 ----
Same as --with-gnu-as but for linker. !
--with-ld=pathname
Same as --with-as, but for the linker. *************** but for linker. *** 213,222 **** information should be used instead of whatever format the host normally uses. Normally GCC uses the same debug format as the host system. !
--enable-multilib
Specify that multiple target ! libraries should be built to support different target variants, calling ! conventions, etc. This is the default.
--enable-threads
Specify that the target --- 237,294 ---- information should be used instead of whatever format the host normally uses. Normally GCC uses the same debug format as the host system. !

On MIPS based systems and on Alphas, you must specify whether you want ! GCC to create the normal ECOFF debugging format, or to use BSD-style ! stabs passed through the ECOFF symbol table. The normal ECOFF debug ! format cannot fully handle languages other than C. BSD stabs format can ! handle other languages, but it only works with the GNU debugger GDB. ! !

Normally, GCC uses the ECOFF debugging format by default; if you ! prefer BSD stabs, specify --with-stabs when you configure GCC. ! !

No matter which default you choose when you configure GCC, the user ! can use the -gcoff and -gstabs+ options to specify explicitly ! the debug format for a particular compilation. ! !

--with-stabs is meaningful on the ISC system on the 386, also, if ! --with-gas is used. It selects use of stabs debugging ! information embedded in COFF output. This kind of debugging information ! supports C++ well; ordinary COFF debugging information does not. ! !

--with-stabs is also meaningful on 386 systems running SVR4. It ! selects use of stabs debugging information embedded in ELF output. The ! C++ compiler currently (2.6.0) does not support the DWARF debugging ! information normally used on 386 SVR4 platforms; stabs provide a ! workable alternative. This requires gas and gdb, as the normal SVR4 ! tools can not generate or interpret stabs. ! !

--disable-multilib
Specify that multiple target ! libraries to support different target variants, calling ! conventions, etc should not be built. The default is to build a ! predefined set of them. ! !

Some targets provide finer-grained control over which multilibs are built ! (e.g., --disable-softfloat): !

! !
arc-*-elf* !
biendian. ! !
arm-*-* !
fpu, 26bit, underscore, interwork, biendian, nofmult. ! !
m68*-*-* !
softfloat, m68881, m68000, m68020. ! !
mips*-*-* !
single-float, biendian, softfloat. ! !
powerpc*-*-*, rs6000*-*-* !
aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, ! sysv, aix. ! !

--enable-threads
Specify that the target *************** supports threads. This affects the Obje *** 224,229 **** --- 296,311 ---- library, and exception handling for other languages like C++ and Java. On some systems, this is the default. +

In general, the best (and, in many cases, the only known) threading + model available will be configured for use. Beware that on some + systems, gcc has not been taught what threading models are generally + available for the system. In this case, --enable-threads is an + alias for --enable-threads=single. + +

--disable-threads +
Specify that threading support should be disabled for the system. + This is an alias for --enable-threads=single. +
--enable-threads=lib
Specify that lib is the thread support library. This affects the Objective-C *************** like C++ and Java. The possibilities fo *** 235,256 ****
AIX thread support.
dce
DCE thread support. -
decosf1 -
DEC OSF/1 thread support. -
irix -
SGI IRIX thread support.
mach !
Generic MACH thread support, known to work on NEXTSTEP. !
os2 !
IBM OS/2 thread support.
posix
Generic POSIX thread support.
pthreads !
Same as posix.
single
Disable thread support, should work for all platforms.
solaris !
SUN Solaris thread support.
vxworks
VxWorks thread support.
win32 --- 317,340 ----
AIX thread support.
dce
DCE thread support.
mach !
Generic MACH thread support, known to work on NeXTSTEP. (Please note ! that the file needed to support this configuration, gthr-mach.h, is ! missing and thus this setting will cause a known bootstrap failure.) !
no !
This is an alias for single.
posix
Generic POSIX thread support.
pthreads !
Same as posix on arm*-*-linux*, *-*-chorusos* and *-*-freebsd* ! only. A future release of gcc might remove this alias or extend it ! to all platforms. !
rtems !
RTEMS thread support.
single
Disable thread support, should work for all platforms.
solaris !
Sun Solaris 2 thread support.
vxworks
VxWorks thread support.
win32 *************** like C++ and Java. The possibilities fo *** 261,267 ****
Specify which cpu variant the compiler should generate code for by default. This is currently only supported on the some ports, specifically arm, powerpc, and ! SPARC. If configure does not recognize the model name (e.g. arm700, 603e, or ultrasparc) you provide, please check the configure script for a complete list of supported models. --- 345,351 ----
Specify which cpu variant the compiler should generate code for by default. This is currently only supported on the some ports, specifically arm, powerpc, and ! SPARC. If configure does not recognize the model name (e.g. arm700, 603e, or ultrasparc) you provide, please check the configure script for a complete list of supported models. *************** in prefix/dirname< *** 280,313 ****
--enable-maintainer-mode
The build rules that regenerate the GCC master message catalog gcc.pot are normally ! disabled. This is because it can only be rebuilt if the complete source ! tree is present. If you have changed the sources and want to rebuild the catalog, configuring with --enable-maintainer-mode will enable ! this. Note that you need a recent version of the gettext tools to do so.
--enable-version-specific-runtime-libs
Specify that runtime libraries should be installed in the compiler specific subdirectory (libsubdir) rather than the usual places. In ! addition, libstdc++'s include files will be installed in libsubdir/include/g++ unless you overruled it by using --with-gxx-include-dir=dirname. Using this option is particularly useful if you intend to use several versions of GCC in parallel. This is currently supported by libf2c and ! libstdc++.
--enable-languages=lang1,lang2,...
Specify that only a particular subset of compilers and ! their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the ! gcc directory of your GCC source tree:
grep language= ! */config-lang.in
Currently, you can use any of the following: ! c++, f77, java and objc. CHILL is not currently maintained, and will almost ! certainly fail to compile. Note that this switch does not work with ! EGCS 1.1.2 or older versions of egcs. It is supported in GCC 2.95 ! and newer versions.
If you do not pass this flag, all languages available in the gcc sub-tree will be configured. Re-defining LANGUAGES when calling make bootstrap does not work anymore, as those --- 364,398 ----
--enable-maintainer-mode
The build rules that regenerate the GCC master message catalog gcc.pot are normally ! disabled. This is because it can only be rebuilt if the complete source ! tree is present. If you have changed the sources and want to rebuild the catalog, configuring with --enable-maintainer-mode will enable ! this. Note that you need a recent version of the gettext tools to do so.
--enable-version-specific-runtime-libs
Specify that runtime libraries should be installed in the compiler specific subdirectory (libsubdir) rather than the usual places. In ! addition, libstdc++'s include files will be installed in libsubdir/include/g++ unless you overruled it by using --with-gxx-include-dir=dirname. Using this option is particularly useful if you intend to use several versions of GCC in parallel. This is currently supported by libf2c and ! libstdc++, and is the default for libobjc which cannot be ! changed in this case.
--enable-languages=lang1,lang2,...
Specify that only a particular subset of compilers and ! their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the ! gcc directory of your GCC source tree:
!
grep language= */config-lang.in
! 
! Currently, you can use any of the following: ! c, c++, f77, java and objc. CHILL is not currently maintained, and will almost ! certainly fail to compile.
If you do not pass this flag, all languages available in the gcc sub-tree will be configured. Re-defining LANGUAGES when calling make bootstrap does not work anymore, as those *************** language sub-directories might not have *** 318,348 **** used by GCJ should not be built. This is useful in case you intend to use GCJ with some other run-time, or you're going to install it separately, or it just happens not to build on your particular ! machine. In general, if the Java front-end is enabled, the GCJ libraries will be enabled too, unless they're known to not work on ! the target platform. If GCJ is enabled but libgcj isn't built, you may need to port it; in this case, before modifying the top-level ! configure.in so that libgcj is enabled by default on this platform, you may use --enable-libgcj to override the default.
--with-dwarf2
Specify that the compiler should ! use DWARF2 debugging information as the default.
--enable-win32-registry !
--enable-win32-registry=KEY
--disable-win32-registry
The --enable-win32-registry option enables Windows-hosted GCC to look up installations paths in the registry using the following key: !
HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\KEY
  
!

KEY defaults to GCC version number, and can be overridden by the ! --enable-win32-registry=KEY option. Vendors and distributors who use custom installers are encouraged to provide a different key, perhaps one comprised of vendor name and GCC version number, to ! avoid conflict with existing installations. This feature is enabled by default, and can be disabled by --disable-win32-registry option. This option has no effect on the other hosts. --- 403,433 ---- used by GCJ should not be built. This is useful in case you intend to use GCJ with some other run-time, or you're going to install it separately, or it just happens not to build on your particular ! machine. In general, if the Java front end is enabled, the GCJ libraries will be enabled too, unless they're known to not work on ! the target platform. If GCJ is enabled but libgcj isn't built, you may need to port it; in this case, before modifying the top-level ! configure.in so that libgcj is enabled by default on this platform, you may use --enable-libgcj to override the default.

--with-dwarf2
Specify that the compiler should ! use DWARF 2 debugging information as the default.
--enable-win32-registry !
--enable-win32-registry=key
--disable-win32-registry
The --enable-win32-registry option enables Windows-hosted GCC to look up installations paths in the registry using the following key: !
HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\key
  
!

key defaults to GCC version number, and can be overridden by the ! --enable-win32-registry=key option. Vendors and distributors who use custom installers are encouraged to provide a different key, perhaps one comprised of vendor name and GCC version number, to ! avoid conflict with existing installations. This feature is enabled by default, and can be disabled by --disable-win32-registry option. This option has no effect on the other hosts. *************** of tree node types when referencing fiel *** 358,364 **** internal consistency checks. This does not change the generated code, but adds error checking within the compiler. This will slow down the compiler and may only work properly if you are building the compiler ! with GNU C. This is on by default when building from CVS or snapshots, but off for releases. More control over the checks may be had by specifying list; the categories of checks available are misc, tree, gc, rtl and gcac. The --- 443,449 ---- internal consistency checks. This does not change the generated code, but adds error checking within the compiler. This will slow down the compiler and may only work properly if you are building the compiler ! with GCC. This is on by default when building from CVS or snapshots, but off for releases. More control over the checks may be had by specifying list; the categories of checks available are misc, tree, gc, rtl and gcac. The *************** checks rtl and gcac--disable-nls

The --enable-nls option enables Native Language Support (NLS), which lets GCC output diagnostics in languages other than American ! English. Native Language Support is enabled by default if not doing a ! canadian cross build. The --disable-nls option disables NLS.
--with-included-gettext
If NLS is enabled, the --with-included-gettext option causes the build --- 454,461 ----
--disable-nls
The --enable-nls option enables Native Language Support (NLS), which lets GCC output diagnostics in languages other than American ! English. Native Language Support is enabled by default if not doing a ! canadian cross build. The --disable-nls option disables NLS.
--with-included-gettext
If NLS is enabled, the --with-included-gettext option causes the build *************** which has target include files. *** 393,408 **** compiler, if prefix/target/sys-include doesn't pre-exist. These include files will be copied into the gcc install directory. Fixincludes will be run on these files to make them compatible with ! gcc.
--with-libs=``dir1 dir2 ... dirN''
Specifies a list of directories which contain the target runtime libraries. These libraries will be copied into the gcc install directory.
--with-newlib !
Specifies that "newlib" is being used as the target C library. This causes __eprintf to be ! omitted from libgcc.a on the assumption that it will be provided by ! newlib.

Note that each --enable option has a corresponding --- 478,493 ---- compiler, if prefix/target/sys-include doesn't pre-exist. These include files will be copied into the gcc install directory. Fixincludes will be run on these files to make them compatible with ! GCC.

--with-libs=``dir1 dir2 ... dirN''
Specifies a list of directories which contain the target runtime libraries. These libraries will be copied into the gcc install directory.
--with-newlib !
Specifies that newlib is being used as the target C library. This causes __eprintf to be ! omitted from libgcc.a on the assumption that it will be provided by ! newlib.

Note that each --enable option has a corresponding diff -Nrc3pad gcc-3.0/INSTALL/download.html gcc-3.0.1/INSTALL/download.html *** gcc-3.0/INSTALL/download.html Sun Jun 17 12:50:02 2001 --- gcc-3.0.1/INSTALL/download.html Sun Aug 19 17:45:10 2001 *************** *** 8,14 ****

Downloading GCC

!

GCC is distributed via CVS and FTP tarballs compressed with gzip or bzip2. It is possible to download a full distribution or specific components. --- 8,15 ----

Downloading GCC

!

GCC is distributed via CVS and FTP ! tarballs compressed with gzip or bzip2. It is possible to download a full distribution or specific components. *************** components. *** 16,32 **** for information on how to obtain GCC.

The full distribution includes the C, C++, Objective-C, Fortran, Java, ! and Chill compilers. The full distribution also includes runtime libraries ! for C++, Objective-C, Fortran, Java and Chill. (GCC 3.0 does not ! include Chill. Releases before 3.0 do not include the Java runtime ! library.) In GCC 3.0 and later versions, GNU compiler testsuites are also included in the full distribution.

If you choose to download specific components, you must download the core ! gcc distribution plus any language specific distributions you wish to ! use. The core distribution includes the C language front-end as well as the ! shared components. Each language has a tarball which includes the language ! front-end as well as the language runtime (when appropriate).

Unpack the core distribution as well as any language specific distributions in the same directory. --- 17,32 ---- for information on how to obtain GCC.

The full distribution includes the C, C++, Objective-C, Fortran, Java, ! and CHILL compilers. The full distribution also includes runtime libraries ! for C++, Objective-C, Fortran, Java and CHILL. (GCC 3.0 does not ! include CHILL.) In GCC 3.0 and later versions, GNU compiler testsuites are also included in the full distribution.

If you choose to download specific components, you must download the core ! GCC distribution plus any language specific distributions you wish to ! use. The core distribution includes the C language front end as well as the ! shared components. Each language has a tarball which includes the language ! front end as well as the language runtime (when appropriate).

Unpack the core distribution as well as any language specific distributions in the same directory. diff -Nrc3pad gcc-3.0/INSTALL/finalinstall.html gcc-3.0.1/INSTALL/finalinstall.html *** gcc-3.0/INSTALL/finalinstall.html Sun Jun 17 12:50:02 2001 --- gcc-3.0.1/INSTALL/finalinstall.html Sun Aug 19 17:45:10 2001 *************** *** 8,15 ****

Installing GCC: Final installation

!

Now that GCC has been built and tested, you can install it with ! cd objdir; make install.

That step completes the installation of GCC; user level binaries can be found in prefix/bin where prefix is the value you --- 8,16 ----

Installing GCC: Final installation

!

Now that GCC has been built (and optionally tested), you can install it with !

cd objdir; make install
! 

That step completes the installation of GCC; user level binaries can be found in prefix/bin where prefix is the value you *************** parts of the compiler in libd *** 23,36 **** info format in infodir (normally prefix/info).

If you don't mind, please quickly review the ! build status page. If your system is not listed, send a note to gcc@gcc.gnu.org indicating that you successfully built and installed GCC.

Include the output from running srcdir/config.guess. (Do ! not send us the config.guess file itself, just the one-line output from ! running it!)

If you find a bug, please report it following our bug reporting guidelines. --- 24,43 ---- info format in infodir (normally prefix/info).

If you don't mind, please quickly review the ! 3.0 build status page. If your system is not listed, send a note to gcc@gcc.gnu.org indicating that you successfully built and installed GCC.

Include the output from running srcdir/config.guess. (Do ! not send us the config.guess file itself, just the one-line output from ! running it!) Also specify which version you built. ! !

We'd also like to know if the ! host/target specific installation notes ! didn't include your host/target information or if that information is ! incomplete or out of date. Send a note to ! gcc@gcc.gnu.org telling us how the information should be changed.

If you find a bug, please report it following our bug reporting guidelines. diff -Nrc3pad gcc-3.0/INSTALL/index.html gcc-3.0.1/INSTALL/index.html *** gcc-3.0/INSTALL/index.html Sun Jun 17 12:50:02 2001 --- gcc-3.0.1/INSTALL/index.html Sun Aug 19 17:45:10 2001 *************** *** 15,30 **** as detailing some target specific installation instructions.

GCC includes several components that previously were separate distributions ! with their own installation instructions. This document supersedes all ! package specific installation instructions. We provide the component ! specific installation information in the source distribution for historical ! reference purposes only.

Before starting the build/install procedure please check the host/target specific installation notes. We recommend you browse the entire generic installation instructions before you proceed.

The installation procedure itself is broken into five steps.

    --- 15,33 ---- as detailing some target specific installation instructions.

    GCC includes several components that previously were separate distributions ! with their own installation instructions. This document supersedes all ! package specific installation instructions.

    Before starting the build/install procedure please check the host/target specific installation notes. We recommend you browse the entire generic installation instructions before you proceed. +

    A + list of successful builds + for GCC 3.0 releases is available at our web pages. This list is updated + as new information becomes available. +

    The installation procedure itself is broken into five steps.

      *************** you proceed. *** 36,45 ****

    Please note that GCC does not support make uninstall and probably ! won't do so in the near future as this would open a can of worms. Instead, we suggest that you install GCC into a directory of its own and simply remove that directory when you do not need that specific version of GCC ! any longer.


    --- 39,49 ----

Please note that GCC does not support make uninstall and probably ! won't do so in the near future as this would open a can of worms. Instead, we suggest that you install GCC into a directory of its own and simply remove that directory when you do not need that specific version of GCC ! any longer, and, if shared libraries are installed there as well, no ! more binaries exist that use them.


diff -Nrc3pad gcc-3.0/INSTALL/specific.html gcc-3.0.1/INSTALL/specific.html *** gcc-3.0/INSTALL/specific.html Sun Jun 17 12:50:02 2001 --- gcc-3.0.1/INSTALL/specific.html Sun Aug 19 17:45:10 2001 *************** *** 11,16 **** --- 11,21 ----

Please read this document carefully before installing the GNU Compiler Collection on your machine. +

A + list of successful builds + for GCC 3.0 releases is available at our web pages. This list is updated + as new information becomes available. +

  • 1750a-*-*
  • a29k *************** GNU Compiler Collection on your machine. *** 24,39 ****
  • arm-*-riscix
  • avr
  • c4x -
  • decstation-*
  • DOS
  • dsp16xx
  • elxsi-elxsi-bsd
  • h8300-hms
  • hppa*-hp-hpux*
  • hppa*-hp-hpux9
  • hppa*-hp-hpux10
  • hppa*-hp-hpux11 -
  • *-*-freebsd*
  • i370-*-*
  • *-*-linux-gnu
  • i?86-*-linux*oldld --- 29,43 ----
  • arm-*-riscix
  • avr
  • c4x
  • DOS
  • dsp16xx
  • elxsi-elxsi-bsd +
  • *-*-freebsd*
  • h8300-hms
  • hppa*-hp-hpux*
  • hppa*-hp-hpux9
  • hppa*-hp-hpux10
  • hppa*-hp-hpux11
  • i370-*-*
  • *-*-linux-gnu
  • i?86-*-linux*oldld *************** GNU Compiler Collection on your machine. *** 70,84 ****
  • m88k-*-dgux
  • m88k-tektronix-sysv3
  • mips-*-*
  • mips-mips-bsd
  • mips-mips-riscos* !
  • mips*-sgi-irix[45] !
  • mips*-sgi-irix6
  • mips-sony-sysv
  • ns32k-encore
  • ns32k-*-genix
  • ns32k-sequent
  • ns32k-utek
  • powerpc-*-elf powerpc-*-sysv4
  • powerpc-*-linux-gnu*
  • powerpc-*-eabiaix --- 74,91 ----
  • m88k-*-dgux
  • m88k-tektronix-sysv3
  • mips-*-* +
  • mips-dec-*
  • mips-mips-bsd
  • mips-mips-riscos* !
  • mips-sgi-irix4 !
  • mips-sgi-irix5 !
  • mips-sgi-irix6
  • mips-sony-sysv
  • ns32k-encore
  • ns32k-*-genix
  • ns32k-sequent
  • ns32k-utek +
  • powerpc*-*-* powerpc-*-sysv4
  • powerpc-*-elf powerpc-*-sysv4
  • powerpc-*-linux-gnu*
  • powerpc-*-eabiaix *************** GNU Compiler Collection on your machine. *** 89,100 ****
  • powerpcle-*-eabi
  • powerpcle-*-winnt powerpcle-*-pe
  • romp-*-aos romp-*-mach
  • *-*-solaris* -
  • sparc-sun-*
  • sparc-sun-solaris*
  • sparc-sun-solaris2.7
  • *-sun-solaris2.8 -
  • Sun V5.0 Compiler Bugs
  • sparc-sun-sunos*
  • sparc-unknown-linux-gnulibc1
  • sparc64-*-* --- 96,107 ----
  • powerpcle-*-eabi
  • powerpcle-*-winnt powerpcle-*-pe
  • romp-*-aos romp-*-mach +
  • #s390-*-linux* +
  • #s390x-*-linux*
  • *-*-solaris*
  • sparc-sun-solaris*
  • sparc-sun-solaris2.7
  • *-sun-solaris2.8
  • sparc-sun-sunos*
  • sparc-unknown-linux-gnulibc1
  • sparc64-*-* *************** GNU Compiler Collection on your machine. *** 118,136 ****

    MIL-STD-1750A processors.

    The MIL-STD-1750A cross configuration produces output for ! as1750, an assembler/linker available under the GNU Public ! License for the 1750A. as1750 can be obtained at ftp://ftp.fta-berlin.de/pub/crossgcc/1750gals/. A similarly licensed simulator for the 1750A is available from same address. !

    You should ignore a fatal error during the building of libgcc (libgcc is ! not yet implemented for the 1750A.)

    The as1750 assembler requires the file ms1750.inc, which is ! found in the directory config/1750a. !

    GNU CC produced the same sections as the Fairchild F9450 C Compiler, namely:

    --- 125,143 ----

    MIL-STD-1750A processors.

    The MIL-STD-1750A cross configuration produces output for ! as1750, an assembler/linker available under the GNU General Public ! License for the 1750A. as1750 can be obtained at ftp://ftp.fta-berlin.de/pub/crossgcc/1750gals/. A similarly licensed simulator for the 1750A is available from same address. !

    You should ignore a fatal error during the building of libgcc ! (libgcc is not yet implemented for the 1750A.)

    The as1750 assembler requires the file ms1750.inc, which is ! found in the directory gcc/config/1750a. !

    GCC produced the same sections as the Fairchild F9450 C Compiler, namely:

    *************** namely: *** 147,156 ****
    Initialization section (code to copy KREL to SREL).
    !

    The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16). This means that type char is represented with a 16-bit word per character. The 1750A's "Load/Store Upper/Lower Byte" instructions are not used by ! GNU CC.


    --- 154,163 ----
    Initialization section (code to copy KREL to SREL).
    !

    The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16). This means that type char is represented with a 16-bit word per character. The 1750A's "Load/Store Upper/Lower Byte" instructions are not used by ! GCC.


    *************** alpha-based platforms using ELF (in part *** 183,209 **** DEC OSF/1, Digital UNIX and Tru64 UNIX). In addition to reading this section, please read all other sections that match your target. !

    We require binutils 2.11.1 (as of yet unreleased), binutils with ! binutils-2_11-branch tag after May 31, 2001 (as taken below), or newer. ! Previous binutils releases had a number of problems with DWARF2 debugging information, not the least of which is incorrect linking of shared libraries. -

    Until binutils 2.11.1 is released, these sample commands may be useful: - -

    mkdir binutils-2.11.X; cd binutils-2.11.X
    - cvs -d :pserver:anoncvs@anoncvs.cygnus.com:/cvs/src \
    -   co -rbinutils-2_11-branch -P binutils
    - mkdir obj; cd obj
    - ../src/configure --prefix=an-absolute-path
    - make all check install
    - 
    - -

    When configuring gcc, provide explicit --with-gnu-as - --with-as=an-absolute-path/bin/as and - --with-gnu-ld --with-ld=an-absolute-path/bin/ld - options to point into the prefix used above. -


    --- 190,200 ---- DEC OSF/1, Digital UNIX and Tru64 UNIX). In addition to reading this section, please read all other sections that match your target. !

    We require binutils 2.11.2 or newer. ! Previous binutils releases had a number of problems with DWARF 2 debugging information, not the least of which is incorrect linking of shared libraries.


    *************** we need to use the old assembler, invoke *** 219,233 **** -oldas option. To bootstrap GCC, you either need to use the Compaq C Compiler: !
       % CC=cc srcdir/configure [target] [options]
      

    or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0: !

       % CC=gcc -Wa,-oldas srcdir/configure [target] [options]
      
    !

    GNU CC writes a .verstamp directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from the system header file /usr/include/stamp.h. If you install a new version of DEC Unix, you should rebuild GCC to pick up the new version --- 210,233 ---- -oldas option. To bootstrap GCC, you either need to use the Compaq C Compiler: !

       % CC=cc srcdir/configure [options] [target]
      

    or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0: !

       % CC=gcc -Wa,-oldas srcdir/configure [options] [target]
      
    !

    As of GNU binutils 2.11.2, neither GNU as nor GNU ld ! are supported on Tru64 UNIX, so you must not configure GCC with ! --with-gnu-as or --with-gnu-ld. ! !

    The --enable-threads options isn't supported yet. A patch is ! in preparation for a future release. The Java runtime library has been ! reported to work on Tru64 UNIX V4.0F, V5.0, and V5.1, so you may try ! --enable-libgcj and report your results. ! !

    GCC writes a .verstamp directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from the system header file /usr/include/stamp.h. If you install a new version of DEC Unix, you should rebuild GCC to pick up the new version *************** unless the comparisons fail without that *** 252,265 **** -save-temps, you will have to manually delete the .i and .s files after each series of compilations. !

    GNU CC now supports both the native (ECOFF) debugging format used by DBX and GDB and an encapsulated STABS format for use only with GDB. See the discussion of the --with-stabs option of configure above for more information on these formats and how to select them.

    There is a bug in DEC's assembler that produces incorrect line numbers for ECOFF format when the .align directive is used. To work ! around this problem, GNU CC will not emit such alignment directives while writing ECOFF format debugging information even if optimization is being performed. Unfortunately, this has the very undesirable side-effect that code addresses when -O is specified are --- 252,265 ---- -save-temps, you will have to manually delete the .i and .s files after each series of compilations. !

    GCC now supports both the native (ECOFF) debugging format used by DBX and GDB and an encapsulated STABS format for use only with GDB. See the discussion of the --with-stabs option of configure above for more information on these formats and how to select them.

    There is a bug in DEC's assembler that produces incorrect line numbers for ECOFF format when the .align directive is used. To work ! around this problem, GCC will not emit such alignment directives while writing ECOFF format debugging information even if optimization is being performed. Unfortunately, this has the very undesirable side-effect that code addresses when -O is specified are *************** debugging, pass --with-gnu-asavr

    ATMEL AVR-family micro controllers. These are used in embedded ! applications. There are no standard Unix configurations. See AVR Options, for the list of supported MCU types.

    Use configure --target=avr --enable-languages="c" to configure GCC. --- 326,334 ----

    avr

    ATMEL AVR-family micro controllers. These are used in embedded ! applications. There are no standard Unix configurations. ! See "AVR Options" in the main manual ! for the list of supported MCU types.

    Use configure --target=avr --enable-languages="c" to configure GCC. *************** can also be obtained from: *** 353,360 ****

    Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal Processors. These are used in embedded applications. There are no ! standard Unix configurations. See C4x Options, for the list of ! supported MCU types.

    GCC can be configured as a cross compiler for both the C3x and C4x architectures on the same system. Use configure --target=c4x --- 355,363 ----

    Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal Processors. These are used in embedded applications. There are no ! standard Unix configurations. ! See "TMS320C3x/C4x Options" in the main manual ! for the list of supported MCU types.

    GCC can be configured as a cross compiler for both the C3x and C4x architectures on the same system. Use configure --target=c4x *************** architectures on the same system. Use < *** 364,422 **** can also be obtained from:


    !

    decstation-*

    !

    MIPS-based DECstations can support three different personalities: ! Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products have ! a configuration name beginning with alpha-dec.) To configure GCC ! for these platforms use the following configurations: !

    !
    decstation-ultrix !
    Ultrix configuration. !
    decstation-osf1 !
    Dec's version of OSF/1. !
    decstation-osfrose !
    Open Software Foundation reference port of OSF/1 which uses the ! OSF/rose object file format instead of ECOFF. Normally, you ! would not select this configuration. !
    !

    The MIPS C compiler needs to be told to increase its table size ! for switch statements with the -Wf,-XNg1500 option in ! order to compile cp/parse.c. If you use the -O2 ! optimization option, you also need to use -Olimit 3000. ! Both of these options are automatically generated in the ! Makefile that the shell script configure builds. ! If you override the CC make variable and use the MIPS ! compilers, you may need to add -Wf,-XNg1500 -Olimit 3000.


    !

    DOS

    ! !

    Please have a look at our binaries page. !

    You cannot install GNU C by itself on MSDOS; it will not compile under ! any MSDOS compiler except itself. You need to get the complete ! compilation package DJGPP, which includes binaries as well as sources, ! and includes all the necessary compilation tools and libraries. !

    !
    !

    dsp16xx

    !

    A port to the AT&T DSP1610 family of processors.


    --- 367,423 ---- can also be obtained from:


    !

    DOS

    !

    Please have a look at our binaries page. !

    You cannot install GCC by itself on MSDOS; it will not compile under ! any MSDOS compiler except itself. You need to get the complete ! compilation package DJGPP, which includes binaries as well as sources, ! and includes all the necessary compilation tools and libraries. !

    !
    !

    dsp16xx

    !

    A port to the AT&T DSP1610 family of processors.


    !

    *-*-freebsd*

    !

    The version of binutils installed in /usr/bin is known to work unless ! otherwise specified in any per-architecture notes. However, binutils ! 2.11 is known to improve overall testsuite results. !

    For FreeBSD 1, FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All ! configuration support and files as shipped with GCC 2.95 are still in ! place. FreeBSD 2.2.7 has been known to bootstrap completely; however, ! it is unknown which version of binutils was used (it is assumed that it ! was the system copy in /usr/bin) and C++ EH failures were noted. !

    For FreeBSD using the ELF file format: DWARF 2 debugging is now the ! default for all CPU architectures. It had been the default on ! FreeBSD/alpha since its inception. You may use -gstabs instead ! of -g, if you really want the old debugging format. There are ! no known issues with mixing object files and libraries with different ! debugging formats. Otherwise, this release of GCC should now match more ! of the configuration used in the stock FreeBSD configuration of GCC. In ! particular, --enable-threads is now configured by default. ! However, as a general user, do not attempt to replace the system ! compiler with this release. Known to bootstrap and check with good ! results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3 and 5-CURRENT. !

    At this time, --enable-threads is not compatible with ! --enable-libgcj on FreeBSD.


    *************** and includes all the necessary compilati *** 424,430 ****

    elxsi-elxsi-bsd

    The Elxsi's C compiler has known limitations that prevent it from ! compiling GNU C. Please contact mrs@cygnus.com for more details.


    --- 425,431 ----

    elxsi-elxsi-bsd

    The Elxsi's C compiler has known limitations that prevent it from ! compiling GCC. Please contact mrs@wrs.com for more details.


    *************** longer a multiple of 2 bytes. *** 445,451 ****

    hppa*-hp-hpux*

    !

    We highly recommend using gas/binutils-2.8 or newer on all hppa platforms; you may encounter a variety of problems when using the HP assembler. --- 446,452 ----

    hppa*-hp-hpux*

    !

    We highly recommend using gas/binutils 2.8 or newer on all hppa platforms; you may encounter a variety of problems when using the HP assembler. *************** use GAS and GDB and configure GCC with t *** 456,465 **** --with-as=... options.

    If you wish to use pa-risc 2.0 architecture support, you must use either ! the HP assembler, gas/binutils-2.11 or a recent snapshot of gas. !

    More specific information to hppa*-hp-hpux* targets follows.


    --- 457,466 ---- --with-as=... options.

    If you wish to use pa-risc 2.0 architecture support, you must use either ! the HP assembler, gas/binutils 2.11 or a recent snapshot of gas. !

    More specific information to hppa*-hp-hpux* targets follows.


    *************** this platform. *** 508,544 ****


    !

    *-*-freebsd*

    ! !

    The version of binutils installed in /usr/bin is known to work unless ! otherwise specified in any per-architecture notes. However, binutils ! 2.11 is known to improve overall testsuite results. ! !

    For FreeBSD 1, FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All ! configuration support and files as shipped with gcc 2.95 are still in ! place. FreeBSD 2.2.7 has been known to bootstrap completely; however, ! it is unknown which version of binutils was used (it is assumed that it ! was the system copy in /usr/bin) and C++ EH failures were noted. ! !

    For FreeBSD using the ELF file format: DWARF2 debugging is now the ! default for all CPU architectures. It had been the default on ! FreeBSD/alpha since its inception. You may use -gstabs instead ! of -g, if you really want the old debugging format. There are ! no known issues with mixing object files and libraries with different ! debugging formats. Otherwise, this release of gcc should now match more ! of the configuration used in the stock FreeBSD configuration of gcc. In ! particular, --enable-threads is now configured by default. ! However, as a general user, do not attempt to replace the system ! compiler with this release. Known to bootstrap and check with good ! results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3 and 5-CURRENT. ! !

    At this time, --enable-threads is not compatible with ! --enable-libgcj on FreeBSD. ! !

    !
    ! !

    i370-*-*

    This port is very preliminary and has many known bugs. We hope to have a higher-quality port for this machine soon. --- 509,515 ----


    !

    i370-*-*

    This port is very preliminary and has many known bugs. We hope to have a higher-quality port for this machine soon. *************** have a higher-quality port for this mach *** 546,560 ****


    !

    *-*-linux-gnu

    If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install ! out-of-the-box. You'll get compile errors while building libstdc++. The patch glibc-2.2.patch, that is to be applied in the GCC source tree, fixes the compatibility problems.

    -

    --- 517,530 ----


    !

    *-*-linux-gnu

    If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install ! out-of-the-box. You'll get compile errors while building libstdc++. The patch glibc-2.2.patch, that is to be applied in the GCC source tree, fixes the compatibility problems.

    *************** glibc 2.2.4 whether patches for GCC 3.0 *** 570,596 ****


    !

    i?86-*-linux*oldld

    Use this configuration to generate a.out binaries on Linux-based GNU systems if you do not have gas/binutils version 2.5.2 or later ! installed. This is an obsolete configuration.


    !

    i?86-*-linux*aout

    Use this configuration to generate a.out binaries on Linux-based ! GNU systems. This configuration is being superseded. You must use gas/binutils version 2.5.2 or later.


    !

    i?86-*-linux*

    !

    You will need binutils-2.9.1.0.15 or newer for exception handling to work.

    If you receive Signal 11 errors when building on GNU/Linux, then it is possible you have a hardware problem. Further information on this can be --- 540,566 ----


    !

    i?86-*-linux*oldld

    Use this configuration to generate a.out binaries on Linux-based GNU systems if you do not have gas/binutils version 2.5.2 or later ! installed. This is an obsolete configuration.


    !

    i?86-*-linux*aout

    Use this configuration to generate a.out binaries on Linux-based ! GNU systems. This configuration is being superseded. You must use gas/binutils version 2.5.2 or later.


    !

    i?86-*-linux*

    !

    You will need binutils 2.9.1.0.15 or newer for exception handling to work.

    If you receive Signal 11 errors when building on GNU/Linux, then it is possible you have a hardware problem. Further information on this can be *************** found on i?86-*-sco

    Compilation with RCC is recommended. Also, it may be a good idea to link with GNU malloc instead of the malloc that comes with the system. --- 569,575 ----


    !

    i?86-*-sco

    Compilation with RCC is recommended. Also, it may be a good idea to link with GNU malloc instead of the malloc that comes with the system. *************** link with GNU malloc instead of the mall *** 607,642 ****


    !

    i?86-*-sco3.2v4

    Use this configuration for SCO release 3.2 version 4.


    !

    i?86-*-sco3.2v5*

    Use this for the SCO OpenServer Release 5 family of operating systems.

    Unlike earlier versions of GCC, the ability to generate COFF with this target is no longer provided. !

    Earlier versions of GCC emitted Dwarf-1 when generating ELF to allow the system debugger to be used. That support was too burdensome to ! maintain. GCC now emits only dwarf-2 for this target. This means you may use either the UDK debugger or GDB to debug programs built by this version of GCC. !

    If you are building languages other than C, you must follow the instructions ! about invoking make bootstrap because the native OpenServer ! compiler will build a cc1plus that will not correctly parse many ! valid C++ programs including those in libgcc.a. ! You must do a make bootstrap if you are building with the ! native compiler. ! !

    Use of the -march-pentiumpro flag can result in unrecognized opcodes when using the native assembler on OS versions before ! 5.0.6. (Support for P6 opcodes was added to the native ELF assembler in that version.) While it's rather rare to see these emitted by GCC yet, errors of the basic form: --- 577,605 ----


    !

    i?86-*-sco3.2v4

    Use this configuration for SCO release 3.2 version 4.


    !

    i?86-*-sco3.2v5*

    Use this for the SCO OpenServer Release 5 family of operating systems.

    Unlike earlier versions of GCC, the ability to generate COFF with this target is no longer provided. !

    Earlier versions of GCC emitted DWARF 1 when generating ELF to allow the system debugger to be used. That support was too burdensome to ! maintain. GCC now emits only DWARF 2 for this target. This means you may use either the UDK debugger or GDB to debug programs built by this version of GCC. !

    Use of the -march=pentiumpro flag can result in unrecognized opcodes when using the native assembler on OS versions before ! 5.0.6. (Support for P6 opcodes was added to the native ELF assembler in that version.) While it's rather rare to see these emitted by GCC yet, errors of the basic form: *************** as the native assembler. *** 665,671 **** additional OpenServer-specific flags.

    Systems based on OpenServer before 5.0.4 (uname -X ! will tell you what you're running) require TLS597 from ftp.sco.com/TLS for C++ constructors and destructors to work right.

    The system linker in (at least) 5.0.4 and 5.0.5 will sometimes --- 628,635 ---- additional OpenServer-specific flags.

    Systems based on OpenServer before 5.0.4 (uname -X ! will tell you what you're running) require TLS597 from ! ftp://ftp.sco.com/TLS/ for C++ constructors and destructors to work right.

    The system linker in (at least) 5.0.4 and 5.0.5 will sometimes *************** available. You must install both *** 678,690 **** and OSS499A.

    The dynamic linker in OpenServer 5.0.5 (earlier versions may show ! the same problem) aborts on certain g77-compiled programs. It's particularly likely to be triggered by building Fortran code with the -fPIC flag. Although it's conceivable that the error could be triggered by other code, only G77-compiled code has been observed to cause this abort. If you are getting core dumps immediately upon execution of your ! g77 program--and especially if it's compiled with -fPIC--try applying ! sco_osr5_g77.patch to your libf2c and rebuilding GCC. Affected faults, when analyzed in a debugger, will show a stack backtrace with a fault occurring in rtld() and the program --- 642,654 ---- and OSS499A.

    The dynamic linker in OpenServer 5.0.5 (earlier versions may show ! the same problem) aborts on certain G77-compiled programs. It's particularly likely to be triggered by building Fortran code with the -fPIC flag. Although it's conceivable that the error could be triggered by other code, only G77-compiled code has been observed to cause this abort. If you are getting core dumps immediately upon execution of your ! G77 program--and especially if it's compiled with -fPIC--try applying ! sco_osr5_g77.patch to your libf2c and rebuilding GCC. Affected faults, when analyzed in a debugger, will show a stack backtrace with a fault occurring in rtld() and the program *************** engineering and will hopefully be addres *** 694,700 ****


    !

    i?86-*-udk

    This target emulates the SCO Universal Development Kit and requires that package be installed. (If it is installed, you will have a --- 658,664 ----


    !

    i?86-*-udk

    This target emulates the SCO Universal Development Kit and requires that package be installed. (If it is installed, you will have a *************** default compiler such as OpenServer 5 or *** 705,714 **** generate binaries that will run on OpenServer, Unixware 2, or Unixware 7, with the same warnings and caveats as the SCO UDK. -

    You can stage1 with either your native compiler or with UDK. If you - don't do a full bootstrap when initially building with your native compiler - you will have an utterly unusable pile of bits as your reward. -

    This target is a little tricky to build because we have to distinguish it from the native tools (so it gets headers, startups, and libraries from the right place) while making the tools not think we're actually --- 669,674 ---- *************** command like this: *** 721,728 ****

    You should substitute i686 in the above command with the appropriate processor for your host. !

    You should follow this with a make bootstrap then ! make install. You can then access the UDK-targeted GCC tools by adding udk- before the commonly known name. For example, to invoke the C compiler, you would use udk-gcc. They will coexist peacefully with any native-target GCC tools you may --- 681,688 ----

    You should substitute i686 in the above command with the appropriate processor for your host. !

    After the usual make bootstrap and ! make install, you can then access the UDK-targeted GCC tools by adding udk- before the commonly known name. For example, to invoke the C compiler, you would use udk-gcc. They will coexist peacefully with any native-target GCC tools you may *************** have installed. *** 731,737 ****


    !

    i?86-*-isc

    It may be a good idea to link with GNU malloc instead of the malloc that comes with the system. --- 691,697 ----


    !

    i?86-*-isc

    It may be a good idea to link with GNU malloc instead of the malloc that comes with the system. *************** comes with the system. *** 742,748 ****


    !

    i?86-*-esix

    It may be good idea to link with GNU malloc instead of the malloc that comes with the system. --- 702,708 ----


    !

    i?86-*-esix

    It may be good idea to link with GNU malloc instead of the malloc that comes with the system. *************** comes with the system. *** 750,756 ****


    !

    i?86-ibm-aix

    You need to use GAS version 2.1 or later, and LD from GNU binutils version 2.2 or later. --- 710,716 ----


    !

    i?86-ibm-aix

    You need to use GAS version 2.1 or later, and LD from GNU binutils version 2.2 or later. *************** GNU binutils version 2.2 or later. *** 758,787 ****


    !

    i?86-sequent-bsd

    Go to the Berkeley universe before compiling.


    !

    i?86-sequent-ptx1*, i?86-sequent-ptx2*

    You must install GNU sed before running configure.


    !

    i?86-*-sysv3*

    The fixproto shell script may trigger a bug in the system shell. If you encounter this problem, upgrade your operating system or ! use BASH (the GNU shell) to run fixproto.


    !

    i860-intel-osf*

    On the Intel Paragon (an i860 machine), if you are using operating system version 1.0, you will get warnings or errors about redefinition --- 718,747 ----


    !

    i?86-sequent-bsd

    Go to the Berkeley universe before compiling.


    !

    i?86-sequent-ptx1*, i?86-sequent-ptx2*

    You must install GNU sed before running configure.


    !

    i?86-*-sysv3*

    The fixproto shell script may trigger a bug in the system shell. If you encounter this problem, upgrade your operating system or ! use bash (the GNU shell) to run fixproto.


    !

    i860-intel-osf*

    On the Intel Paragon (an i860 machine), if you are using operating system version 1.0, you will get warnings or errors about redefinition *************** extern int vsprintf(char *, const char *** 817,842 ****


    !

    *-lynx-lynxos

    !

    LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as /bin/gcc. You should compile with this instead of /bin/cc. ! You can tell GNU CC to use the GNU assembler and linker, by specifying --with-gnu-as --with-gnu-ld when configuring. These will produce ! COFF format object files and executables; otherwise GNU CC will use the installed tools, which produce a.out format executables.


    !

    *-ibm-aix*

    AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or newer is recommended to build on this platform.

    Errors involving alloca when building GCC generally are due ! to an incorrect definition of CC in the Makefile or mixing files compiled with the native C compiler and GCC. During the stage1 phase of the build, the native AIX compiler must be invoked as cc (not xlc). Once configure has been informed of --- 777,802 ----


    !

    *-lynx-lynxos

    !

    LynxOS 2.2 and earlier comes with GCC 1.x already installed as /bin/gcc. You should compile with this instead of /bin/cc. ! You can tell GCC to use the GNU assembler and linker, by specifying --with-gnu-as --with-gnu-ld when configuring. These will produce ! COFF format object files and executables; otherwise GCC will use the installed tools, which produce a.out format executables.


    !

    *-ibm-aix*

    AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or newer is recommended to build on this platform.

    Errors involving alloca when building GCC generally are due ! to an incorrect definition of CC in the Makefile or mixing files compiled with the native C compiler and GCC. During the stage1 phase of the build, the native AIX compiler must be invoked as cc (not xlc). Once configure has been informed of *************** is the version of Make (see above). *** 849,856 ****

    Binutils 2.10 does not support AIX 4.3. Binutils available from the AIX Toolbox for Linux: GNU and Open Source tools for AIX; website does work. Binutils 2.11 is expected to include AIX 4.3 ! support. The GNU Assembler is necessary for libstdc++ to build. The ! AIX native ld still is recommended. The native AIX tools do interoperate with GCC.

    Linking executables and shared libraries may produce warnings of --- 809,816 ----

    Binutils 2.10 does not support AIX 4.3. Binutils available from the AIX Toolbox for Linux: GNU and Open Source tools for AIX; website does work. Binutils 2.11 is expected to include AIX 4.3 ! support. The GNU Assembler is necessary for libstdc++ to build. The ! AIX native ld still is recommended. The native AIX tools do interoperate with GCC.

    Linking executables and shared libraries may produce warnings of *************** switch by using the configure option


    !

    m32r-*-elf

    Mitsubishi M32R processor. This configuration is intended for embedded systems. --- 867,873 ----


    !

    m32r-*-elf

    Mitsubishi M32R processor. This configuration is intended for embedded systems. *************** This configuration is intended for embed *** 915,930 ****


    !

    m68000-hp-bsd

    HP 9000 series 200 running BSD. Note that the C compiler that comes ! with this system cannot compile GNU CC; contact law@cygnus.com ! to get binaries of GNU CC for bootstrapping.


    !

    m6811-elf

    Motorola 68HC11 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. --- 875,890 ----


    !

    m68000-hp-bsd

    HP 9000 series 200 running BSD. Note that the C compiler that comes ! with this system cannot compile GCC; contact law@cygnus.com ! to get binaries of GCC for bootstrapping.


    !

    m6811-elf

    Motorola 68HC11 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. *************** applications. There are no standard Uni *** 932,938 ****


    !

    m6812-elf

    Motorola 68HC12 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. --- 892,898 ----


    !

    m6812-elf

    Motorola 68HC12 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. *************** applications. There are no standard Uni *** 940,964 ****


    !

    m68k-altos

    Altos 3068. You must use the GNU assembler, linker and debugger. ! Also, you must fix a kernel bug. Details in the file README.ALTOS.


    !

    m68k-apple-aux

    Apple Macintosh running A/UX. You may configure GCC to use either the system assembler and linker or the GNU assembler and linker. You should use the GNU configuration ! if you can, especially if you also want to use GNU C++. You enabled ! that configuration with + the --with-gnu-as and --with-gnu-ld options to configure.

    Note the C compiler that comes ! with this system cannot compile GNU CC. You can find binaries of GNU CC for bootstrapping on jagubox.gsfc.nasa.gov. You will also a patched version of /bin/ld there that raises some of the arbitrary limits found in the original. --- 900,924 ----


    !

    m68k-altos

    Altos 3068. You must use the GNU assembler, linker and debugger. ! Also, you must fix a kernel bug.


    !

    m68k-apple-aux

    Apple Macintosh running A/UX. You may configure GCC to use either the system assembler and linker or the GNU assembler and linker. You should use the GNU configuration ! if you can, especially if you also want to use G++. You enable ! that configuration with the --with-gnu-as and --with-gnu-ld options to configure.

    Note the C compiler that comes ! with this system cannot compile GCC. You can find binaries of GCC for bootstrapping on jagubox.gsfc.nasa.gov. You will also a patched version of /bin/ld there that raises some of the arbitrary limits found in the original. *************** raises some of the arbitrary limits foun *** 966,974 ****


    !

    m68k-att-sysv

    !

    AT&T 3b1, a.k.a. 7300 PC. This version of GNU CC cannot be compiled with the system C compiler, which is too buggy. You will need to get a previous version of GCC and use it to bootstrap. Binaries are available from the OSU-CIS archive, at --- 926,934 ----


    !

    m68k-att-sysv

    !

    AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled with the system C compiler, which is too buggy. You will need to get a previous version of GCC and use it to bootstrap. Binaries are available from the OSU-CIS archive, at *************** bootstrap. Binaries are available from *** 977,1002 ****


    !

    m68k-bull-sysv

    !

    Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU CC works ! either with native assembler or GNU assembler. You can use ! GNU assembler with native coff generation by providing --with-gnu-as to ! the configure script or use GNU assembler with dbx-in-coff encapsulation ! by providing --with-gnu-as --stabs. For any problem with native assembler or for availability of the DPX/2 port of GAS, contact F.Pierresteguy@frcl.bull.fr.


    !

    m68k-crds-unox

    Use configure unos for building on Unos.

    The Unos assembler is named casm instead of as. For some strange reason linking /bin/as to /bin/casm changes the ! behavior, and does not work. So, when installing GNU CC, you should install the following script as as in the subdirectory where the passes of GCC are installed: --- 937,962 ----


    !

    m68k-bull-sysv

    !

    Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GCC works ! either with native assembler or GNU assembler. You can use ! GNU assembler with native COFF generation by providing --with-gnu-as to ! the configure script or use GNU assembler with stabs-in-COFF encapsulation ! by providing --with-gnu-as --stabs. For any problem with the native assembler or for availability of the DPX/2 port of GAS, contact F.Pierresteguy@frcl.bull.fr.


    !

    m68k-crds-unox

    Use configure unos for building on Unos.

    The Unos assembler is named casm instead of as. For some strange reason linking /bin/as to /bin/casm changes the ! behavior, and does not work. So, when installing GCC, you should install the following script as as in the subdirectory where the passes of GCC are installed: *************** casm $* *** 1005,1015 ****

    The default Unos library is named libunos.a instead of ! libc.a. To allow GNU CC to function, either change all references to -lc in gcc.c to -lunos or link /lib/libc.a to /lib/libunos.a. !

    When compiling GNU CC with the standard compiler, to overcome bugs in the support of alloca, do not use -O when making stage 2. Then use the stage 2 compiler with -O to make the stage 3 compiler. This compiler will have the same characteristics as the usual --- 965,975 ----

    The default Unos library is named libunos.a instead of ! libc.a. To allow GCC to function, either change all references to -lc in gcc.c to -lunos or link /lib/libc.a to /lib/libunos.a. !

    When compiling GCC with the standard compiler, to overcome bugs in the support of alloca, do not use -O when making stage 2. Then use the stage 2 compiler with -O to make the stage 3 compiler. This compiler will have the same characteristics as the usual *************** and linking from that library. *** 1028,1037 ****


    !

    m68k-hp-hpux

    HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in ! the assembler that prevents compilation of GNU CC. This bug manifests itself during the first stage of compilation, while building libgcc2.a: --- 988,997 ----


    !

    m68k-hp-hpux

    HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in ! the assembler that prevents compilation of GCC. This bug manifests itself during the first stage of compilation, while building libgcc2.a: *************** library version of "cvtnum(3c)" and thus *** 1058,1064 ****

    This patch is also known as PHCO_4484. !

    In addition, if you wish to use gas --with-gnu-as you must use gas version 2.1 or later, and you must use the GNU linker version 2.1 or later. Earlier versions of gas relied upon a program which converted the gas output into the native HP-UX format, but that program has not been --- 1018,1024 ----

    This patch is also known as PHCO_4484. !

    In addition, if you wish to use gas, you must use gas version 2.1 or later, and you must use the GNU linker version 2.1 or later. Earlier versions of gas relied upon a program which converted the gas output into the native HP-UX format, but that program has not been *************** to look like: *** 1083,1100 ****


    !

    m68k-*-nextstep*

    Current GCC versions probably do not work on version 2 of the NeXT operating system. !

    On NeXTStep 3.0, the Objective C compiler does not work, due, apparently, to a kernel bug that it happens to trigger. This problem does not happen on 3.1.

    You absolutely must use GNU sed and GNU make on this platform. !

    On NEXTSTEP 3.x where x < 3 the build of GCC will abort during stage1 with an error message like this:

      _eh
    --- 1043,1060 ----
      


    !

    m68k-*-nextstep*

    Current GCC versions probably do not work on version 2 of the NeXT operating system. !

    On NeXTStep 3.0, the Objective-C compiler does not work, due, apparently, to a kernel bug that it happens to trigger. This problem does not happen on 3.1.

    You absolutely must use GNU sed and GNU make on this platform. !

    On NeXTSTEP 3.x where x < 3 the build of GCC will abort during stage1 with an error message like this:

      _eh
    *************** for this sequence to work.
    *** 1129,1135 ****
      


    !

    m68k-ncr-*

    On the Tower models 4n0 and 6n0, by default a process is not allowed to have more than one megabyte of memory. GCC cannot compile --- 1089,1095 ----


    !

    m68k-ncr-*

    On the Tower models 4n0 and 6n0, by default a process is not allowed to have more than one megabyte of memory. GCC cannot compile *************** to the configuration file: *** 1144,1150 ****


    !

    m68k-sun

    Sun 3. We do not provide a configuration file to use the Sun FPA by default, because programs that establish signal handlers for floating --- 1104,1110 ----


    !

    m68k-sun

    Sun 3. We do not provide a configuration file to use the Sun FPA by default, because programs that establish signal handlers for floating *************** point traps inherently cannot work with *** 1153,1166 ****


    !

    m68k-sun-sunos4.1.1

    It is reported that you may need the GNU assembler on this platform.


    !

    m88k-*-svr3

    Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. These systems tend to use the Green Hills C, revision 1.8.5, as the --- 1113,1126 ----


    !

    m68k-sun-sunos4.1.1

    It is reported that you may need the GNU assembler on this platform.


    !

    m88k-*-svr3

    Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. These systems tend to use the Green Hills C, revision 1.8.5, as the *************** compiler. If the stage 3 and stage 4 ob *** 1171,1183 **** suggests you encountered a problem with the standard C compiler; the stage 3 and 4 compilers may be usable. !

    It is best, however, to use an older version of GNU CC for bootstrapping if you have one.


    !

    m88k-*-dgux

    Motorola m88k running DG/UX. To build 88open BCS native or cross compilers on DG/UX, specify the configuration name as --- 1131,1143 ---- suggests you encountered a problem with the standard C compiler; the stage 3 and 4 compilers may be usable. !

    It is best, however, to use an older version of GCC for bootstrapping if you have one.


    !

    m88k-*-dgux

    Motorola m88k running DG/UX. To build 88open BCS native or cross compilers on DG/UX, specify the configuration name as *************** configuration based on the current softw *** 1194,1204 ****


    !

    m88k-tektronix-sysv3

    Tektronix XD88 running UTekV 3.2e. Do not turn on optimization while building stage1 if you bootstrap with ! the buggy Green Hills compiler. Also, The bundled LAI System V NFS is buggy so if you build in an NFS mounted directory, start from a fresh reboot, or avoid NFS all together. Otherwise you may have trouble getting clean comparisons --- 1154,1164 ----


    !

    m88k-tektronix-sysv3

    Tektronix XD88 running UTekV 3.2e. Do not turn on optimization while building stage1 if you bootstrap with ! the buggy Green Hills compiler. Also, the bundled LAI System V NFS is buggy so if you build in an NFS mounted directory, start from a fresh reboot, or avoid NFS all together. Otherwise you may have trouble getting clean comparisons *************** between stages. *** 1207,1213 ****


    !

    mips-*-*

    If you use the 1.31 version of the MIPS assembler (such as was shipped with Ultrix 3.1), you will need to use the -fno-delayed-branch switch --- 1167,1173 ----


    !

    mips-*-*

    If you use the 1.31 version of the MIPS assembler (such as was shipped with Ultrix 3.1), you will need to use the -fno-delayed-branch switch *************** To protect against this, GCC passes -shared or -call_shared switch. !

    mips-mips-bsd

    MIPS machines running the MIPS operating system in BSD mode. It's possible that some old versions of the system lack the functions --- 1200,1206 ---- linker unless you pass an explicit -shared or -call_shared switch. !

    mips-mips-bsd

    MIPS machines running the MIPS operating system in BSD mode. It's possible that some old versions of the system lack the functions *************** possible that some old versions of the s *** 1248,1256 **** system lacks these, you must remove or undo the definition of TARGET_MEM_FUNCTIONS in mips-bsd.h. !

    The MIPS C compiler needs to be told to increase its table size ! for switch statements with the -Wf,-XNg1500 option in ! order to compile cp/parse.c. If you use the -O2 optimization option, you also need to use -Olimit 3000. Both of these options are automatically generated in the Makefile that the shell script configure builds. --- 1208,1248 ---- system lacks these, you must remove or undo the definition of TARGET_MEM_FUNCTIONS in mips-bsd.h. !

    If you use the MIPS C compiler to bootstrap, it may be necessary ! to increase its table size for switch statements with the ! -Wf,-XNg1500 option. If you use the -O2 ! optimization option, you also need to use -Olimit 3000. ! Both of these options are automatically generated in the ! Makefile that the shell script configure builds. ! If you override the CC make variable and use the MIPS ! compilers, you may need to add -Wf,-XNg1500 -Olimit 3000. ! !

    !
    ! !

    mips-dec-*

    ! !

    MIPS-based DECstations can support three different personalities: ! Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products have ! a configuration name beginning with alpha*-dec.) To configure GCC ! for these platforms use the following configurations: ! !

    !
    mips-dec-ultrix !
    Ultrix configuration. ! !
    mips-dec-osf1 !
    DEC's version of OSF/1. ! !
    mips-dec-osfrose !
    Open Software Foundation reference port of OSF/1 which uses the ! OSF/rose object file format instead of ECOFF. Normally, you ! would not select this configuration. !
    ! !

    If you use the MIPS C compiler to bootstrap, it may be necessary ! to increase its table size for switch statements with the ! -Wf,-XNg1500 option. If you use the -O2 optimization option, you also need to use -Olimit 3000. Both of these options are automatically generated in the Makefile that the shell script configure builds. *************** compilers, you may need to add -Wf *** 1262,1270 ****

    mips-mips-riscos*

    !

    The MIPS C compiler needs to be told to increase its table size ! for switch statements with the -Wf,-XNg1500 option in ! order to compile cp/parse.c. If you use the -O2 optimization option, you also need to use -Olimit 3000. Both of these options are automatically generated in the Makefile that the shell script configure builds. --- 1254,1262 ----

    mips-mips-riscos*

    !

    If you use the MIPS C compiler to bootstrap, it may be necessary ! to increase its table size for switch statements with the ! -Wf,-XNg1500 option. If you use the -O2 optimization option, you also need to use -Olimit 3000. Both of these options are automatically generated in the Makefile that the shell script configure builds. *************** personalities: default, BSD 4.3, System *** 1277,1295 **** for these platforms use the following configurations:

    !
    mips-mips-riscosrev !
    Default configuration for RISC-OS, revision rev. !
    mips-mips-riscosrevbsd !
    BSD 4.3 configuration for RISC-OS, revision rev. !
    mips-mips-riscosrevsysv4 !
    System V.4 configuration for RISC-OS, revision rev.


    !
    mips-mips-riscosrevsysv !
    System V.3 configuration for RISC-OS, revision rev.

    The revision rev mentioned above is the revision of --- 1269,1287 ---- for these platforms use the following configurations:

    !
    mips-mips-riscosrev !
    Default configuration for RISC-OS, revision rev. !
    mips-mips-riscosrevbsd !
    BSD 4.3 configuration for RISC-OS, revision rev. !
    mips-mips-riscosrevsysv4 !
    System V.4 configuration for RISC-OS, revision rev.


    !
    mips-mips-riscosrevsysv !
    System V.3 configuration for RISC-OS, revision rev.

    The revision rev mentioned above is the revision of *************** avoiding a linker bug. *** 1300,1336 ****


    !

    mips*-sgi-irix[45]

    In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" option must be installed from the CD-ROM supplied from Silicon Graphics. This is found on the 2nd CD in release 4.0.1. !

    In order to compile GCC on an SGI running IRIX 5, the "compiler_dev.hdr" ! subsystem must be installed from the IDO CD-ROM supplied by Silicon ! Graphics. ! !

    make compare may fail on version 5 of IRIX unless you add ! -save-temps to CFLAGS. On these systems, the name of the ! assembler input file is stored in the object file, and that makes ! comparison fail if it differs between the stage1 and ! stage2 compilations. The option -save-temps forces a ! fixed name to be used for the assembler input file, instead of a ! randomly chosen name in /tmp. Do not add -save-temps ! unless the comparisons fail without that option. If you do you ! -save-temps, you will have to manually delete the .i and ! .s files after each series of compilations. ! !

    The MIPS C compiler needs to be told to increase its table size ! for switch statements with the -Wf,-XNg1500 option in ! order to compile cp/parse.c. If you use the -O2 ! optimization option, you also need to use -Olimit 3000. ! Both of these options are automatically generated in the ! Makefile that the shell script configure builds. ! If you override the CC make variable and use the MIPS ! compilers, you may need to add -Wf,-XNg1500 -Olimit 3000. ! !

    On Irix version 4.0.5F, and perhaps on some other versions as well, there is an assembler bug that reorders instructions incorrectly. To work around it, specify the target configuration mips-sgi-irix4loser. This configuration inhibits assembler --- 1292,1304 ----


    !

    mips-sgi-irix4

    In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" option must be installed from the CD-ROM supplied from Silicon Graphics. This is found on the 2nd CD in release 4.0.1. !

    On IRIX version 4.0.5F, and perhaps on some other versions as well, there is an assembler bug that reorders instructions incorrectly. To work around it, specify the target configuration mips-sgi-irix4loser. This configuration inhibits assembler *************** inhibit reordering. *** 1344,1425 ****

    The -noasmopt option can be useful for testing whether a problem is due to erroneous assembler reordering. Even if a problem does not go away with -noasmopt, it may still be due to assembler ! reordering--perhaps GNU CC itself was miscompiled as a result. !

    To enable debugging under Irix 5, you must use GNU as 2.5 or later, ! and use the --with-gnu-as configure option when configuring gcc. ! GNU as is distributed as part of the binutils package. !

    You must use GAS on these platforms, as the native assembler can not handle ! the code for exception handling support. Either of these messages indicates ! that you are using the MIPS assembler when instead you should be using GAS: !

    as0: Error: ./libgcc2.c, line 1:Badly delimited numeric literal ! .4byte $LECIE1-$LSCIE1 ! as0: Error: ./libgcc2.c, line 1:malformed statement !

    or: !

    as0: Error: /src/bld-gcc/gcc/libgcc2.c, line 1:undefined symbol in expression ! .word $LECIE1-$LSCIE1 !

    These systems don't have ranlib, which various components in GCC need; you ! should be able to avoid this problem by installing GNU binutils, which includes ! a functional ranlib for this system. !

    You may get the following warning on irix4 platforms, it can be safely ! ignored. !

      warning: foo.o does not have gp tables for all its sections.
    ! 
    !

    When building GCC, the build process loops rebuilding cc1 over and ! over again. This happens on mips-sgi-irix5.2, and possibly other platforms.
    ! It has been reported that this is a known bug in the make shipped with ! IRIX 5.2. We recommend you use GNU make instead of the vendor supplied ! make program; however, you may have success with smake on IRIX 5.2 if ! you do not have GNU make available. !

    See http://freeware.sgi.com/ for more ! information about using GCC on IRIX platforms.


    !

    mips*-sgi-irix6

    ! !

    You must not use GAS on irix6 platforms; doing so will only ! cause problems. ! !

    These systems don't have ranlib, which various components in GCC need; you ! should be able to avoid this problem by making a dummy script called ranlib ! which just exits with zero status and placing it in your path. !

    If you are using Irix cc as your bootstrap compiler, you must ensure that the N32 ABI is in use. To test this, compile a simple C file with cc and then run file on the resulting object file. The output should look like: !

        test.o: ELF N32 MSB ...
      

    If you see: !

        test.o: ELF 32-bit MSB
      
    !

    then your version of cc uses the O32 ABI default. You should set the environment variable CC to cc -n32 before configuring GCC.

    GCC does not currently support generating O32 ABI binaries in the ! mips-sgi-irix6 configurations. It used to be possible to create a GCC ! with O32 ABI only support by configuring it for the mips-sgi-irix5 ! target. See the link below for details.

    GCC does not correctly pass/return structures which are ! smaller than 16 bytes and which are not 8 bytes. The problem is very ! involved and difficult to fix. It affects a number of other targets also, but IRIX 6 is affected the most, because it is a 64 bit target, and 4 byte ! structures are common. The exact problem is that structures are being padded at the wrong end, e.g. a 4 byte structure is loaded into the lower 4 bytes of the register when it should be loaded into the upper 4 bytes of the register. --- 1312,1429 ----

    The -noasmopt option can be useful for testing whether a problem is due to erroneous assembler reordering. Even if a problem does not go away with -noasmopt, it may still be due to assembler ! reordering--perhaps GCC itself was miscompiled as a result. !

    You may get the following warning on IRIX 4 platforms, it can be safely ! ignored. !

      warning: foo.o does not have gp tables for all its sections.
    ! 
    !

    !
    !

    mips-sgi-irix5

    !

    This configuration has considerable problems, which will be fixed in a ! future release. !

    In order to compile GCC on an SGI running IRIX 5, the "compiler_dev.hdr" ! subsystem must be installed from the IDO CD-ROM supplied by Silicon ! Graphics. It is also available for download from ! http://www.sgi.com/developers/devtools/apis/ido.html. !

    make compare may fail on version 5 of IRIX unless you add ! -save-temps to CFLAGS. On these systems, the name of the ! assembler input file is stored in the object file, and that makes ! comparison fail if it differs between the stage1 and ! stage2 compilations. The option -save-temps forces a ! fixed name to be used for the assembler input file, instead of a ! randomly chosen name in /tmp. Do not add -save-temps ! unless the comparisons fail without that option. If you do you ! -save-temps, you will have to manually delete the .i and ! .s files after each series of compilations. !

    If you use the MIPS C compiler to bootstrap, it may be necessary ! to increase its table size for switch statements with the ! -Wf,-XNg1500 option. If you use the -O2 ! optimization option, you also need to use -Olimit 3000. !

    To enable debugging under IRIX 5, you must use GNU as 2.11.2 ! or later, ! and use the --with-gnu-as configure option when configuring GCC. ! GNU as is distributed as part of the binutils package. ! When using release 2.11.2, you need to apply a patch ! http://sources.redhat.com/ml/binutils/2001-07/msg00352.html ! which will be included in the next release of binutils. !

    When building GCC, the build process loops rebuilding cc1 over ! and over again. This happens on mips-sgi-irix5.2, and possibly ! other platforms. It has been reported that this is a known bug in the ! make shipped with IRIX 5.2. We recommend you use GNU ! make instead of the vendor supplied make program; ! however, you may have success with smake on IRIX 5.2 if you do ! not have GNU make available.


    !

    mips-sgi-irix6

    !

    If you are using IRIX cc as your bootstrap compiler, you must ensure that the N32 ABI is in use. To test this, compile a simple C file with cc and then run file on the resulting object file. The output should look like: !

    test.o: ELF N32 MSB ...
      

    If you see: ! !

    test.o: ELF 32-bit MSB ...
      
    !

    or ! !

    test.o: ELF 64-bit MSB ...
    ! 
    ! !

    then your version of cc uses the O32 or N64 ABI by default. You should set the environment variable CC to cc -n32 before configuring GCC. +

    GCC on IRIX 6 is usually built to support both the N32 and N64 ABIs. If + you build GCC on a system that doesn't have the N64 libraries installed, + you need to configure with --disable-multilib so GCC doesn't + try to use them. Look for /usr/lib64/libc.so.1 to see if you + have the 64-bit libraries installed. + +

    You must not use GNU as (which isn't built anyway as of + binutils 2.11.2) on IRIX 6 platforms; doing so will only cause problems. +

    GCC does not currently support generating O32 ABI binaries in the ! mips-sgi-irix6 configurations. It is possible to create a GCC ! with O32 ABI only support by configuring it for the mips-sgi-irix5 ! target and using a patched GNU as 2.11.2 as documented in the ! mips-sgi-irix5 section above. Using the ! native assembler requires patches to GCC which will be included in a ! future release. It is ! expected that O32 ABI support will be available again in a future release. ! !

    The --enable-threads option doesn't currently work, a patch is ! in preparation for a future release. The --enable-libgcj ! option is disabled by default: IRIX 6 uses a very low default limit ! (20480) for the command line length. Although libtool contains a ! workaround for this problem, at least the N64 libgcj is known not ! to build despite this, running into an internal error of the native ! ld. A sure fix is to increase this limit (ncargs) to ! its maximum of 262144 bytes. If you have root access, you can use the ! systune command to do this.

    GCC does not correctly pass/return structures which are ! smaller than 16 bytes and which are not 8 bytes. The problem is very ! involved and difficult to fix. It affects a number of other targets also, but IRIX 6 is affected the most, because it is a 64 bit target, and 4 byte ! structures are common. The exact problem is that structures are being padded at the wrong end, e.g. a 4 byte structure is loaded into the lower 4 bytes of the register when it should be loaded into the upper 4 bytes of the register. *************** register. *** 1427,1434 ****

    GCC is consistent with itself, but not consistent with the SGI C compiler (and the SGI supplied runtime libraries), so the only failures that can happen are when there are library functions that take/return such ! structures. There are very few such library functions. I can only recall ! seeing two of them: inet_ntoa, and semctl.

    See http://freeware.sgi.com/ for more information about using GCC on IRIX platforms. --- 1431,1440 ----

    GCC is consistent with itself, but not consistent with the SGI C compiler (and the SGI supplied runtime libraries), so the only failures that can happen are when there are library functions that take/return such ! structures. There are very few such library functions. Currently this ! is known to affect inet_ntoa, inet_lnaof, ! inet_netof, inet_makeaddr, and semctl. Until the ! bug is fixed, GCC contains workarounds for the known affected functions.

    See http://freeware.sgi.com/ for more information about using GCC on IRIX platforms. *************** information about using GCC on IRIX plat *** 1436,1442 ****


    !

    mips-sony-sysv

    Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 (which uses ELF instead of COFF). Support for 5.0.2 will probably be provided --- 1442,1448 ----


    !

    mips-sony-sysv

    Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 (which uses ELF instead of COFF). Support for 5.0.2 will probably be provided *************** code generated by GCC when shared librar *** 1446,1459 ****


    !

    ns32k-encore

    Encore ns32000 system. Encore systems are supported only under BSD.


    !

    ns32k-*-genix

    National Semiconductor ns32000 system. Genix has bugs in alloca and malloc; you must get the compiled versions of these from GNU --- 1452,1465 ----


    !

    ns32k-encore

    Encore ns32000 system. Encore systems are supported only under BSD.


    !

    ns32k-*-genix

    National Semiconductor ns32000 system. Genix has bugs in alloca and malloc; you must get the compiled versions of these from GNU *************** Emacs. *** 1462,1486 ****


    !

    ns32k-sequent

    Go to the Berkeley universe before compiling.


    !

    ns32k-utek

    UTEK ns32000 system ("merlin"). The C compiler that comes with this ! system cannot compile GNU CC; contact tektronix!reed!mason to get ! binaries of GNU CC for bootstrapping.


    !

    powerpc-*-elf, powerpc-*-sysv4

    ! !

    PowerPC system in big endian mode, running System V.4.

    You can specify a default version for the -mcpu=cpu_type switch by using the configure option --with-cpu-cpu_type. --- 1468,1490 ----


    !

    ns32k-sequent

    Go to the Berkeley universe before compiling.


    !

    ns32k-utek

    UTEK ns32000 system ("merlin"). The C compiler that comes with this ! system cannot compile GCC; contact tektronix!reed!mason to get ! binaries of GCC for bootstrapping.


    !

    powerpc-*-*

    You can specify a default version for the -mcpu=cpu_type switch by using the configure option --with-cpu-cpu_type. *************** switch by using the configure option


    !

    powerpc-*-linux-gnu*

    You will need ! binutils-2.9.4.0.8 ! or newer for a working GCC. It is strongly recommended to recompile binutils if you initially built it with gcc-2.7.2.x. -

    You can specify a default version for the -mcpu=cpu_type - switch by using the configure option --with-cpu-cpu_type. -


    !

    powerpc-*-eabiaix

    Embedded PowerPC system in big endian mode with -mcall-aix selected as the default. -

    You can specify a default version for the -mcpu=cpu_type - switch by using the configure option --with-cpu-cpu_type. -


    !

    powerpc-*-eabisim

    Embedded PowerPC system in big endian mode for use in running under the PSIM simulator. -

    You can specify a default version for the -mcpu=cpu_type - switch by using the configure option --with-cpu-cpu_type. -


    !

    powerpc-*-eabi

    Embedded PowerPC system in big endian mode. -

    You can specify a default version for the -mcpu=cpu_type - switch by using the configure option --with-cpu-cpu_type. -


    !

    powerpcle-*-elf, powerpcle-*-sysv4

    PowerPC system in little endian mode, running System V.4. -

    You can specify a default version for the -mcpu=cpu_type - switch by using the configure option --with-cpu-cpu_type. -


    !

    powerpcle-*-eabisim

    Embedded PowerPC system in little endian mode for use in running under the PSIM simulator. --- 1492,1545 ----


    !

    powerpc-*-elf, powerpc-*-sysv4

    ! !

    PowerPC system in big endian mode, running System V.4. ! !

    !
    ! !

    powerpc-*-linux-gnu*

    You will need ! binutils 2.9.4.0.8 ! or newer for a working GCC. It is strongly recommended to recompile binutils if you initially built it with gcc-2.7.2.x.


    !

    powerpc-*-eabiaix

    Embedded PowerPC system in big endian mode with -mcall-aix selected as the default.


    !

    powerpc-*-eabisim

    Embedded PowerPC system in big endian mode for use in running under the PSIM simulator.


    !

    powerpc-*-eabi

    Embedded PowerPC system in big endian mode.


    !

    powerpcle-*-elf, powerpcle-*-sysv4

    PowerPC system in little endian mode, running System V.4.


    !

    powerpcle-*-eabisim

    Embedded PowerPC system in little endian mode for use in running under the PSIM simulator. *************** the PSIM simulator. *** 1551,1581 ****


    !

    powerpcle-*-eabi

    Embedded PowerPC system in little endian mode. -

    You can specify a default version for the -mcpu=cpu_type - switch by using the configure option --with-cpu-cpu_type. -


    !

    powerpcle-*-winnt, powerpcle-*-pe

    PowerPC system in little endian mode running Windows NT. -

    You can specify a default version for the -mcpu=cpu_type - switch by using the configure option --with-cpu-cpu_type. -


    !

    romp-*-aos, romp-*-mach

    The only operating systems supported for the IBM RT PC are AOS and ! MACH. GNU CC does not support AIX running on the RT. We recommend you ! compile GNU CC with an earlier version of itself; if you compile GNU CC with hc, the Metaware compiler, it will work, but you will get mismatches between the stage 2 and stage 3 compilers in various files. These errors are minor differences in some floating-point constants and --- 1547,1571 ----


    !

    powerpcle-*-eabi

    Embedded PowerPC system in little endian mode.


    !

    powerpcle-*-winnt, powerpcle-*-pe

    PowerPC system in little endian mode running Windows NT.


    !

    romp-*-aos, romp-*-mach

    The only operating systems supported for the IBM RT PC are AOS and ! MACH. GCC does not support AIX running on the RT. We recommend you ! compile GCC with an earlier version of itself; if you compile GCC with hc, the Metaware compiler, it will work, but you will get mismatches between the stage 2 and stage 3 compilers in various files. These errors are minor differences in some floating-point constants and *************** can be safely ignored; the stage 3 compi *** 1584,1642 ****


    !

    *-*-solaris*

    ! !

    Starting with Solaris, Sun does not ship a C compiler any more. To ! bootstrap and install GCC you first have to install a pre-built ! compiler, see our binaries page for ! details. ! !

    You must use GNU Make to build GCC on Solaris 2. If you don't have GNU ! Make installed, you can use the prebuilt compiler mentioned above to ! build it. ! !

    Sun as 4.X is broken in that it cannot cope with long symbol names. ! A typical error message might look similar to the following: ! !

    /usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: ! error: can't compute value of an expression involving an external symbol. ! !

    This is Sun bug 4237974. This is fixed with patch 108908-02 and has ! been fixed in later (5.x) versions of the assembler. !

    Solaris' /bin/sh will often fail to configure libstdc++-v3, boehm-gc or ! libjava. If you encounter this problem, set CONFIG_SHELL to ! /bin/ksh in your environment and run make bootstrap again. ! Another possibility that sometimes helps is to remove ! *-*-solaris*/config.cache. !


    !

    sparc-sun-*

    !

    Sometimes on a Sun 4 you may observe a crash in the program ! genflags or genoutput while building GCC. This is said to ! be due to a bug in sh. You can probably get around it by running ! genflags or genoutput manually and then retrying the ! make. !


    !

    sparc-sun-solaris*

    !

    On Solaris 2, executables of GCC version 2.0.2 are commonly ! available, but they have a bug that shows up when compiling current ! versions of GCC: undefined symbol errors occur during assembly if you ! use -g. !

    The solution is to compile the current version of GCC without ! -g. That makes a working compiler which you can use to recompile ! with -g.

    Solaris 2 comes with a number of optional OS packages. Some of these ! packages are needed to use GCC fully. If you did not install all optional packages when installing Solaris, you will need to verify that the packages that GCC needs are installed. --- 1574,1609 ----


    !

    s390-*-linux*

    !

    IBM S/390 system running Linux for S/390. !


    !

    s390x-*-linux*

    !

    IBM zSeries system (64 bit) running Linux for zSeries. !


    !

    *-*-solaris*

    !

    Sun does not ship a C compiler with Solaris. To bootstrap and install ! GCC you first have to install a pre-built compiler, see our ! binaries page for details. !

    Solaris' /bin/sh will often fail to configure libstdc++-v3, boehm-gc or ! libjava. If you encounter this problem, set CONFIG_SHELL to ! /bin/ksh in your environment and run make bootstrap again. ! Another possibility that sometimes helps is to remove ! *-*-solaris*/config.cache.

    Solaris 2 comes with a number of optional OS packages. Some of these ! packages are needed to use GCC fully, namely SUNWarc, ! SUNWbtool, SUNWesu, SUNWhea, SUNWlibm, ! SUNWsprot, and SUNWtoo. If you did not install all optional packages when installing Solaris, you will need to verify that the packages that GCC needs are installed. *************** the pkginfo command. To ad *** 1645,1675 **** pkgadd command. For further details, see the Solaris documentation. !

    For Solaris 2.0 and 2.1, GCC needs six packages: SUNWarc, ! SUNWbtool, SUNWesu, SUNWhea, SUNWlibm, and ! SUNWtoo. ! !

    For Solaris 2.2, GCC needs an additional seventh package: SUNWsprot. ! !

    On Solaris 2, trying to use the linker and other tools in /usr/ucb to install GCC has been observed to cause trouble. For example, the linker may hang indefinitely. The fix is to remove /usr/ucb from your PATH. !

    All releases of GNU binutils prior to 2.11.1 have known bugs on this ! platform. We recommend the use of GNU binutils 2.11.1 or the vendor ! tools (Sun as, Sun ld). !

    Unfortunately, C++ shared libraries, including libstdc++, won't work ! properly if assembled with Sun as: the linker will complain about relocations in read-only sections, in the definition of virtual ! tables. Also, Sun as fails to process long symbols resulting from mangling template-heavy C++ function names.


    !

    sparc-sun-solaris2.7

    Sun patch 107058-01 (1999-01-13) for SPARC Solaris 7 triggers a bug in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 --- 1612,1650 ---- pkgadd command. For further details, see the Solaris documentation. !

    On some versions of Solaris, trying to use the linker and other tools in /usr/ucb to install GCC has been observed to cause trouble. For example, the linker may hang indefinitely. The fix is to remove /usr/ucb from your PATH. !

    All releases of GNU binutils prior to 2.11.2 have known bugs on this ! platform. We recommend the use of GNU binutils 2.11.2 or the vendor ! tools (Sun as, Sun ld). !

    Unfortunately, C++ shared libraries, including libstdc++, won't work ! properly if assembled with Sun as: the linker will complain about relocations in read-only sections, in the definition of virtual ! tables. Also, Sun as fails to process long symbols resulting from mangling template-heavy C++ function names.


    !

    sparc-sun-solaris*

    ! !

    Sun as 4.X is broken in that it cannot cope with long symbol names. ! A typical error message might look similar to the following: ! !

    /usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: ! error: can't compute value of an expression involving an external symbol. ! !

    This is Sun bug 4237974. This is fixed with patch 108908-02 and has ! been fixed in later (5.x) versions of the assembler. ! !

    !
    ! !

    sparc-sun-solaris2.7

    Sun patch 107058-01 (1999-01-13) for SPARC Solaris 7 triggers a bug in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 *************** back it out. *** 1687,1693 ****

  • Copy the original, unpatched Solaris 7 /usr/ccs/bin/as into ! /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.1/as, adjusting the latter name to fit your local conventions and software version numbers. --- 1662,1668 ----
  • Copy the original, unpatched Solaris 7 /usr/ccs/bin/as into ! /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.0/as, adjusting the latter name to fit your local conventions and software version numbers. *************** the bug, but (as of 1999-10-06) it is st *** 1706,1712 ****
    !

    *-sun-solaris2.8

    Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or newer: g++ will complain that types are missing. These headers assume --- 1681,1687 ----


    !

    *-sun-solaris2.8

    Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or newer: g++ will complain that types are missing. These headers assume *************** will assume that any missing type is For Solaris 8, this is fixed by revision 24 or later of patch 108652 (for SPARCs) or 108653 (for Intels). !

    Solaris 8's linker fails to link some libjava programs if previously-installed GCC java libraries already exist in the configured ! prefix. For this reason, libgcj is disabled by default on Solaris 8. ! If you use GNU ld, or if you don't have a previously-installed libgcj in the same prefix, use --enable-libgcj to build and install the Java libraries.


    !

    Sun V5.0 Compiler Bugs

    ! !

    The Sun V5.0 compilers are known to mis-compile GCC 2.95 and GCC 2.95.1, ! which in turn causes GCC to fail its bootstrap comparison test. ! GCC 2.95.2 has a workaround. ! !

    !
    ! !

    sparc-sun-sunos*

    !

    A bug in the SunOS4 linker will cause it to crash when linking -fPIC compiled objects (and will therefore not allow you to build shared libraries).

    To fix this problem you can either use the most recent version of ! binutils or get the latest SunOS4 linker patch (patch ID 100170-10) from Sun's patch site.


    !

    sparc-unknown-linux-gnulibc1

    It has been reported that you might need ! binutils-2.8.1.0.23 for this platform, too.


    !

    sparc64-*-*

    GCC version 2.95 is not able to compile code correctly for sparc64 targets. Users of the Linux kernel, at least, ! 12~can use the sparc32 program to start up a new shell invocation with an environment that causes configure to ! recognize (via uname -a) the system as sparc-*-* instead.


    !

    *-*-sysv*

    On System V release 3, you may get this error message while linking: --- 1694,1749 ----

    For Solaris 8, this is fixed by revision 24 or later of patch 108652 (for SPARCs) or 108653 (for Intels). !

    Solaris 8's linker fails to link some libjava programs if previously-installed GCC java libraries already exist in the configured ! prefix. For this reason, libgcj is disabled by default on Solaris 8. ! If you use GNU ld, or if you don't have a previously-installed libgcj in the same prefix, use --enable-libgcj to build and install the Java libraries.


    !

    sparc-sun-sunos*

    !

    A bug in the SunOS 4 linker will cause it to crash when linking -fPIC compiled objects (and will therefore not allow you to build shared libraries).

    To fix this problem you can either use the most recent version of ! binutils or get the latest SunOS 4 linker patch (patch ID 100170-10) from Sun's patch site. +

    Sometimes on a Sun 4 you may observe a crash in the program + genflags or genoutput while building GCC. This is said to + be due to a bug in sh. You can probably get around it by running + genflags or genoutput manually and then retrying the + make. +


    !

    sparc-unknown-linux-gnulibc1

    It has been reported that you might need ! binutils 2.8.1.0.23 for this platform, too.


    !

    sparc64-*-*

    GCC version 2.95 is not able to compile code correctly for sparc64 targets. Users of the Linux kernel, at least, ! can use the sparc32 program to start up a new shell invocation with an environment that causes configure to ! recognize (via uname -a) the system as sparc-*-* instead.


    !

    *-*-sysv*

    On System V release 3, you may get this error message while linking: *************** while linking: *** 1780,1786 **** in strings table for file whatever

  • !

    This probably indicates that the disk is full or your ULIMIT won't allow the file to be as large as it needs to be.

    This problem can also result because the kernel parameter MAXUMEM --- 1752,1758 ---- in strings table for file whatever

    !

    This probably indicates that the disk is full or your ulimit won't allow the file to be as large as it needs to be.

    This problem can also result because the kernel parameter MAXUMEM *************** is said to work. Smaller values may als *** 1794,1800 **** /usr/local/lib/bison.simple:625: virtual memory exhausted !

    that too indicates a problem with disk space, ULIMIT, or MAXUMEM.

    On a System V release 4 system, make sure /usr/bin precedes /usr/ucb in PATH. The cc command in --- 1766,1772 ---- /usr/local/lib/bison.simple:625: virtual memory exhausted !

    that too indicates a problem with disk space, ulimit, or MAXUMEM.

    On a System V release 4 system, make sure /usr/bin precedes /usr/ucb in PATH. The cc command in *************** is said to work. Smaller values may als *** 1803,1822 ****


    !

    vax-dec-ultrix

    !

    Don't try compiling with Vax C (vcc). It produces incorrect code in some cases (for example, when alloca is used). -

    Meanwhile, compiling cp/parse.c with pcc does not work because of - an internal table size limitation in that compiler. To avoid this - problem, compile just the GNU C compiler first, and use it to recompile - building all the languages that you want to run. -


    !

    we32k-*-*

    These computers are also known as the 3b2, 3b5, 3b20 and other similar names. (However, the 3b1 is actually a 68000.) --- 1775,1789 ----


    !

    vax-dec-ultrix

    !

    Don't try compiling with VAX C (vcc). It produces incorrect code in some cases (for example, when alloca is used).


    !

    we32k-*-*

    These computers are also known as the 3b2, 3b5, 3b20 and other similar names. (However, the 3b1 is actually a 68000.) *************** system's linker seems to be unable to ha *** 1826,1832 **** debugging information.

    The system's compiler runs out of capacity when compiling stmt.c ! in GNU CC. You can work around this by building cpp in GNU CC first, then use that instead of the system's preprocessor with the system's C compiler to compile stmt.c. Here is how: --- 1793,1799 ---- debugging information.

    The system's compiler runs out of capacity when compiling stmt.c ! in GCC. You can work around this by building cpp in GCC first, then use that instead of the system's preprocessor with the system's C compiler to compile stmt.c. Here is how: *************** echo '/lib/cpp.gnu -traditional ${1+"$@" *** 1836,1842 **** chmod +x /lib/cpp !

    The system's compiler produces bad code for some of the GNU CC optimization files. So you must build the stage 2 compiler without optimization. Then build a stage 3 compiler with optimization. That executable should work. Here are the necessary commands: --- 1803,1809 ---- chmod +x /lib/cpp !

    The system's compiler produces bad code for some of the GCC optimization files. So you must build the stage 2 compiler without optimization. Then build a stage 3 compiler with optimization. That executable should work. Here are the necessary commands: *************** as the file cc1plus is larg *** 1852,1858 ****


    !

    Microsoft Windows (32 bit)

    A port of GCC 2.95.x is included with the Cygwin environment. --- 1819,1825 ----


    !

    Microsoft Windows (32 bit)

    A port of GCC 2.95.x is included with the Cygwin environment. *************** without modification. *** 1863,1869 ****


    !

    OS/2

    GCC does not currently support OS/2. However, Andrew Zabolotny has been working on a generic OS/2 port with pgcc. The current code code can be found --- 1830,1836 ----


    !

    OS/2

    GCC does not currently support OS/2. However, Andrew Zabolotny has been working on a generic OS/2 port with pgcc. The current code code can be found *************** at Older systems

    GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems --- 1842,1848 ----


    !

    Older systems

    GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems *************** bring GCC up on such a system, if still *** 1901,1913 **** require first installing an old version of GCC which did work on that system, and using it to compile a more recent GCC, to avoid bugs in the vendor compiler. Old releases of GCC 1 and GCC 2 are available in ! the old-releases directory on the GCC mirror sites. Header bugs may generally be avoided using fixincludes, but bugs or deficiencies in libraries and the operating system may still cause problems.

    For some systems, old versions of GNU binutils may also be useful, ! and are available from pub/binutils/old-releases on sources.redhat.com mirror sites.

    Some of the information on specific systems above relates to --- 1868,1880 ---- require first installing an old version of GCC which did work on that system, and using it to compile a more recent GCC, to avoid bugs in the vendor compiler. Old releases of GCC 1 and GCC 2 are available in ! the old-releases directory on the GCC mirror sites. Header bugs may generally be avoided using fixincludes, but bugs or deficiencies in libraries and the operating system may still cause problems.

    For some systems, old versions of GNU binutils may also be useful, ! and are available from pub/binutils/old-releases on sources.redhat.com mirror sites.

    Some of the information on specific systems above relates to *************** current GCC) is to be found in the GCC t *** 1918,1924 ****


    !

    all ELF targets (SVR4, Solaris, etc.)

    C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of --- 1885,1891 ----


    !

    all ELF targets (SVR4, Solaris, etc.)

    C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of diff -Nrc3pad gcc-3.0/INSTALL/test.html gcc-3.0.1/INSTALL/test.html *** gcc-3.0/INSTALL/test.html Sun Jun 17 12:50:02 2001 --- gcc-3.0.1/INSTALL/test.html Sun Aug 19 17:45:10 2001 *************** *** 8,18 ****

    Installing GCC: Testing

    !

    Please note that this is only applicable ! to current development versions of GCC and GCC 3.0 or later. ! GCC 2.95.x does not come with a testsuite. ! !

    Before you install GCC, you might wish to run the testsuite. This step is optional and may require you to download additional software.

    First, you must have downloaded the testsuites. --- 8,14 ----

    Installing GCC: Testing

    !

    Before you install GCC, you might wish to run the testsuite. This step is optional and may require you to download additional software.

    First, you must have downloaded the testsuites. *************** dejagnu 1.3 is not sufficient. *** 25,34 ****

    Now you may need specific preparations:

    !

    Fortran

    !

    Fortran bugs are documented in the G77 manual rather than explicitly ! listed here. Please see "Known ! Causes of Trouble with GNU Fortran" in the ! G77 manual. !

    C++

    This is the list of bugs (and non-bugs) in g++ (aka GNU C++) that are reported very often, but not yet fixed. While it is certainly --- 245,385 ----

  • GCC 2.95.2 does not build on GNU/Linux systems using glibc 2.2, such as Red Hat 7.0. A patch is ! available. This is fixed in GCC 2.95.3 and GCC 3.0.
  • GCC 2.95.2 crashes when compiling mbx.c from the PINE 4.30 or IMAP2000 distribution on Sparc systems running Solaris.
!
+

Fortran

!

Fortran bugs are documented in the G77 manual rather than ! explicitly listed here. Please see ! "Known Causes of Trouble with GNU ! Fortran" in the G77 manual. ! !


! !

C

! !

The following are not bugs in the C compiler, but are reported ! often enough to warrant a mention here.

! !
!
Cannot initialize a static variable with ! stdin.
!

This has nothing to do with GCC, but people ask us about it a ! lot. Code like this: ! !

! #include <stdio.h> ! ! FILE *yyin = stdin; !
! ! will not compile with GNU libc (GNU/Linux libc6), because ! stdin is not a constant. This was done deliberately, in ! order for there to be no limit on the number of open FILE ! objects. It is surprising for people used to traditional Unix C ! libraries, but it is permitted by the C standard.

! !

This construct commonly occurs in code generated by old versions of ! lex or yacc. We suggest you try regenerating the parser with a ! current version of flex or bison, respectively. In your own code, the ! appropriate fix is to move the initialization to the beginning of ! main.

! !

There is a common misconception that the GCC developers are ! responsible for GNU libc. These are in fact two entirely separate ! projects. The appropriate place to ask questions relating to GNU libc ! is ! libc-alpha@sources.redhat.com. !

! !
Cannot use preprocessor directive in macro arguments.
!

Let me guess... you wrote code that looks something like this: !

! memcpy(dest, src, ! #ifdef PLATFORM1 ! 12 ! #else ! 24 ! #endif ! ); !
! and you got a whole pile of error messages: !
! ! test.c:11: warning: preprocessing directive not recognized within ! macro arg
! test.c:11: warning: preprocessing directive not recognized within ! macro arg
! test.c:11: warning: preprocessing directive not recognized within ! macro arg
! test.c: In function `foo':
! test.c:6: undefined or invalid # directive
! test.c:8: undefined or invalid # directive
! test.c:9: parse error before `24'
! test.c:10: undefined or invalid # directive
! test.c:11: parse error before `#'
!
! ! The problem, simply put, is that GCC's preprocessor does not allow you ! to put #ifdef (or any other directive) inside the arguments of ! a macro. Your C library's <string.h> happens to ! define memcpy as a macro - this is perfectly legitimate. ! The code therefore will not compile.

! !

We have two good reasons for not allowing directives inside ! macro arguments. First, it is not portable. It is "undefined ! behavior" according to the C standard; that means different ! compilers will do different things with it. Some will give you ! errors. Some will dump core. Some will silently mangle your code - ! you could get the equivalent of

!
! 	memcpy(dest, src, 1224);
! 
!

from the above example. A very few might do what you expected it ! to. We therefore feel it is most useful for GCC to reject this ! construct immediately so that it is found and fixed.

! !

Second, it is extraordinarily difficult to implement the ! preprocessor such that it does what you would expect for every ! possible directive found inside a macro argument. The best example is ! perhaps !

! #define foo(arg) ... arg ...
! foo(blah
! #undef foo
! blah)
!
! which is impossible to implement in portable C without ! leaking memory. Allowing only a subset of directives would be ! confusing.

! !

It is always possible to rewrite code which uses conditionals ! inside macros so that it doesn't. You could write the above ! example !

! #ifdef PLATFORM1
! memcpy(dest, src, 12);
! #else
! memcpy(dest, src, 24);
! #endif
!
! This is a bit more typing, but I personally think it's better style ! in addition to being more portable.

! !

In recent versions of glibc, printf is among the ! functions which are implemented as macros.

!
! !
! !

C++

This is the list of bugs (and non-bugs) in g++ (aka GNU C++) that are reported very often, but not yet fixed. While it is certainly *************** C++. This means that code which might ha *** 244,260 **** version, is now rejected. You should update your code to be C++.

You should try to use the latest stable release of the GNU C++ ! compiler. This is currently 3.0. Many commonly reported bugs in earlier ! releases are fixed in that version. !

Common problems updating from g++ 2.95 to g++ 3.0

!

g++ 3.0 conforms much closer to the ISO C++ standard (available at ! http://www.ncits.org/cplusplus.htm). ! We have also implemented some of the core and library defect reports (available at http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively).

    --- 399,420 ---- version, is now rejected. You should update your code to be C++.

    You should try to use the latest stable release of the GNU C++ ! compiler. This is currently 3.0. Many commonly reported bugs in ! earlier releases are fixed in that version.

    !

    Common problems updating from G++ 2.95 to G++ ! 3.0

    !

    G++ 3.0 conforms much closer to the ISO C++ standard (available at ! http://www.ncits.org/cplusplus.htm).

    ! !

    We have also implemented some of the core and library defect reports ! (available at http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! ! http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html ! respectively).

      *************** you don't you will get link errors). *** 274,280 **** The .h names are still available, but are deprecated.
    • <strstream> is deprecated, use ! <stringstream> instead.
    • streambuf::seekoff & streambuf::seekpos are private, instead use --- 434,443 ---- The .h names are still available, but are deprecated.
    • <strstream> is deprecated, use ! <sstream> instead. (The 3.0 BUGS file says ! <stringstream>, that was an error, ! stringstream is the class defined in ! <sstream>.)
    • streambuf::seekoff & streambuf::seekpos are private, instead use *************** same. *** 309,372 ****
    !

    Non-bugs

    ! Here are some features that have been reported as bugs, but are not.
    !
    Nested classes can access private types of the containing class. !
    G++ now implements type access control on member types. Defect report 45 clarifies that nested classes are members of the class they ! are nested in, and so are granted access to private members of that class. !
    Classes in exception specifiers must be complete types. !
    [15.4]/1 tells you that you cannot have an incomplete type, or ! pointer to incomplete (other than cv void *) in an ! exception specification. !
    G++ emits two copies of constructors and destructors. !
    In general there are three types of constructor (and destructor).
    1. The complete object constructor/destructor.
    2. The base object constructor/destructor.
    3. The allocating destructor/deallocating destructor.
    The first two are different, when virtual base classes are involved. ! In some cases we can do better, and this is logged in GNATS. !
    Exceptions don't work in multithreaded applications !
    You need to rebuild g++ and libstdc++ with --enable-threads. ! Remember, c++ exceptions are not like hardware interrupts. You cannot ! throw an exception in one thread and catch it in another. You cannot ! throw an exception from a signal handler, and catch it in the main ! thread. !
    Global destructors are not run in the correct order !
    Global destructors should be run in the reverse order of their ! constructors completing. In most cases this is the same as the ! reverse order of constructors starting, but sometimes it is ! different, and that is important. You need to compile and link your programs with --use-cxa-atexit. We have not turned this switch on by default, as it requires a cxa aware runtime ! library (libc, glibc, or equivalent).
    !

    Missing features

    ! We know some things are missing from g++.
    !
    export is not implemented. !
    The keyword will be parsed correctly, but has no effect. !
    Two stage lookup in templates is not implemented. !
    [14.6] specifies how names are looked up inside a template. G++ does ! not do this correctly, but for most templates this will not be noticeable. !
    !

    Parse errors for "simple" code

    Up to and including GCC 3.0, the compiler will give "parse error" for seemingly simple code, such as --- 472,580 ----
!

Non-bugs

! !

Here are some features that have been reported as bugs, but are ! not.

!
Nested classes can access private types of the containing ! class.
!

G++ now implements type access control on member types. Defect report 45 clarifies that nested classes are members of the class they ! are nested in, and so are granted access to private members of that ! class.

!
Classes in exception specifiers must be complete ! types.
!

[15.4]/1 tells you that you cannot have an incomplete type, or ! pointer to incomplete (other than cv void *) in ! an exception specification.

!
G++ emits two copies of constructors and destructors.
! !

In general there are three types of constructors (and ! destructors).

  1. The complete object constructor/destructor.
  2. The base object constructor/destructor.
  3. The allocating destructor/deallocating destructor.
The first two are different, when virtual base classes are involved. ! In some cases we can do better, and this is logged in GNATS.

!
Exceptions don't work in multithreaded applications.
!

You need to rebuild g++ and libstdc++ with ! --enable-threads. Remember, c++ exceptions are not like ! hardware interrupts. You cannot throw an exception in one thread and ! catch it in another. You cannot throw an exception from a signal ! handler, and catch it in the main thread.

! !
Global destructors are not run in the correct order.
!

Global destructors should be run in the reverse order of their ! constructors completing. In most cases this is the same as ! the reverse order of constructors starting, but sometimes it ! is different, and that is important. You need to compile and link your programs with --use-cxa-atexit. We have not turned this switch on by default, as it requires a cxa aware runtime ! library (libc, glibc, or ! equivalent).

! !
Problems with floating point computations.
!

In a number of cases, GCC appears to perform floating point ! computations incorrectly. For example, the program !

! #include <iostream>
!
! int main() {
!
! double min = 0.0;
! double max = 0.5;
! double width = 0.01;
! std::cout << (int)(((max - min) / width) - 1) << ! std::endl;
!
! }
!
! might print 50 on some systems and optimization levels, and 51 on ! others.

! !

The is the result of rounding: The computer cannot ! represent all real numbers exactly, so it has to use ! approximations. When computing with approximation, the computer needs ! to round to the nearest representable number.

! !

This is not a bug in the compiler, but an inherent limitation of ! the float and double types. Please study ! this paper ! for more information.

!

Missing features

!

We know some things are missing from G++.

!
The export keyword is not implemented.
!

Most C++ compilers (G++ included) do not yet implement ! export, which is necessary for separate compilation of ! template declarations and definitions. Without export, a ! template definition must be in scope to be used. The obvious ! workaround is simply to place all definitions in the header ! itself. Alternatively, the compilation unit containing template ! definitions may be included from the header.

!
Two stage lookup in templates is not implemented.
!

[14.6] specifies how names are looked up inside a template. G++ ! does not do this correctly, but for most templates this will not be ! noticeable.

!
!

Parse errors for "simple" code

Up to and including GCC 3.0, the compiler will give "parse error" for seemingly simple code, such as *************** exact error also somewhat varies with th *** 436,445 **** work-arounds proposed do not change the semantics of the program at all; they make them perhaps less readable. !

Optimization at -O3 takes a very long time

At -O3, all functions are candidates for inlining. The heuristic used has some deficiencies which show up when allowed such ! freedom. This is g++ specific, as it has an earlier inliner than gcc. --- 644,655 ---- work-arounds proposed do not change the semantics of the program at all; they make them perhaps less readable. !

Optimization at -O3 takes a ! very long time

At -O3, all functions are candidates for inlining. The heuristic used has some deficiencies which show up when allowed such ! freedom. This is g++ specific, as it has an earlier inliner than ! gcc.

diff -Nrc3pad gcc-3.0/config/ChangeLog gcc-3.0.1/config/ChangeLog *** gcc-3.0/config/ChangeLog Sun Jun 17 12:39:15 2001 --- gcc-3.0.1/config/ChangeLog Sun Aug 19 14:08:02 2001 *************** *** 1,3 **** --- 1,11 ---- + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + 20010617 Release Manager * GCC 3.0 Released. diff -Nrc3pad gcc-3.0/config/mpw/ChangeLog gcc-3.0.1/config/mpw/ChangeLog *** gcc-3.0/config/mpw/ChangeLog Sun Jun 17 12:39:11 2001 --- gcc-3.0.1/config/mpw/ChangeLog Sun Aug 19 14:08:03 2001 *************** *** 1,3 **** --- 1,15 ---- + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + 20010617 Release Manager * GCC 3.0 Released. diff -Nrc3pad gcc-3.0/config.sub gcc-3.0.1/config.sub *** gcc-3.0/config.sub Sat Jun 9 11:49:05 2001 --- gcc-3.0.1/config.sub Mon Jul 16 03:04:04 2001 *************** case $basic_machine in *** 238,244 **** | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ ! | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ | v850 | c4x \ | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ --- 238,244 ---- | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ ! | mips64vr5000 | mips64vr5000el | mcore | s390 | s390x \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ | v850 | c4x \ | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ diff -Nrc3pad gcc-3.0/configure.in gcc-3.0.1/configure.in *** gcc-3.0/configure.in Tue May 29 23:49:05 2001 --- gcc-3.0.1/configure.in Mon Aug 13 09:14:49 2001 *************** *** 15,21 **** ## for 'Autoconf' (autoconf.texi) and 'Configure' (configure.texi). # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! # 1999, 2000 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by --- 15,21 ---- ## for 'Autoconf' (autoconf.texi) and 'Configure' (configure.texi). # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! # 1999, 2000, 2001 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by *************** case "${target}" in *** 758,763 **** --- 758,769 ---- target_configdirs="${target_configdirs} target-libstub target-cygmon" fi ;; + s390*-*-linux*) + # linux has rx in libc + skipdirs="$skipdirs target-librx" + # The libffi port is not yet in the GCC tree, boehm-gc does not work. + noconfigdirs="$noconfigdirs ${libgcj}" + ;; *-*-linux*) # linux has rx in libc skipdirs="$skipdirs target-librx" *************** case "${target}" in *** 812,817 **** --- 818,826 ---- i[3456]86-*-beos*) noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}" ;; + m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*) + noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}" + ;; m68k-*-elf*) noconfigdirs="$noconfigdirs ${libgcj}" if [ x${is_cross_compiler} != xno ] ; then diff -Nrc3pad gcc-3.0/contrib/ChangeLog gcc-3.0.1/contrib/ChangeLog *** gcc-3.0/contrib/ChangeLog Sun Jun 17 12:39:19 2001 --- gcc-3.0.1/contrib/ChangeLog Sun Aug 19 14:08:04 2001 *************** *** 1,3 **** --- 1,38 ---- + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-13 Mark Mitchell + + * gcc_release: Remove restriction against minor revisions. + + 2001-07-28 Richard Henderson + + * test_summary: Copy LAST_UPDATED UTC time to head of summary. + * gcc_update: Dump timestamp in LAST_UPDATED. + + 2001-07-03 Joseph S. Myers + + * texi2pod.pl: Handle @r inside @item. + + 2001-06-21 Joseph S. Myers + + * gcc_release: Add another space to ChangeLog headers. Use tab to + indent ChangeLog message. Update release status in Fortran + version files. + + 2001-06-18 Mark Mitchell + + * gcc_release (build_sources): Fix dates generated + for ChangeLogs. + + * gcc_release: Add support for modifying ChangeLogs and + updating versions. + 20010617 Release Manager * GCC 3.0 Released. diff -Nrc3pad gcc-3.0/contrib/gcc_release gcc-3.0.1/contrib/gcc_release *** gcc-3.0/contrib/gcc_release Thu Jun 14 13:26:05 2001 --- gcc-3.0.1/contrib/gcc_release Mon Aug 13 22:36:42 2001 *************** build_sources() { *** 104,112 **** || error "Could not create \`${WORKING_DIRECTORY}'" changedir "${WORKING_DIRECTORY}" if [ -n "${TAG}" ]; then inform "Tagging release sources" ! ${CVS} -z 9 rtag -r ${BRANCH} ${TAG} gcc || \ error "Could not tag release sources" BRANCH=$TAG fi --- 104,161 ---- || error "Could not create \`${WORKING_DIRECTORY}'" changedir "${WORKING_DIRECTORY}" + # If this is a final release, make sure that the ChangeLogs + # and version strings are updated. + if [ ${FINAL} -ne 0 ]; then + inform "Updating ChangeLogs and version files" + + ${CVS} co -d "`basename ${SOURCE_DIRECTORY}`" \ + -r ${BRANCH} gcc || \ + error "Could not check out release sources" + for x in `find ${SOURCE_DIRECTORY} -name ChangeLog`; do + cat - ${x} > ${x}.new < ${y}.new && \ + mv ${y}.new ${y} && \ + ${CVS} ci -m 'Update version' ${y}) || \ + error "Could not update ${x}" + done + for x in gcc/f/version.c libf2c/libF77/Version.c \ + libf2c/libI77/Version.c libf2c/libU77/Version.c; do + y=`basename ${x}` + (changedir `dirname ${SOURCE_DIRECTORY}/${x}` && \ + sed -e 's/experimental\|prerelease/release/g' < ${y} > ${y}.new && \ + mv ${y}.new ${y} && \ + ${CVS} ci -m 'Update version' ${y}) || \ + error "Could not update ${x}" + done + + # Make sure we tag the sources for a final release. + TAG="gcc_`echo ${RELEASE} | tr . _`_release" + + rm -rf ${SOURCE_DIRECTORY} + fi + + # Tag the sources. if [ -n "${TAG}" ]; then inform "Tagging release sources" ! ${CVS} rtag -r ${BRANCH} ${TAG} gcc || \ error "Could not tag release sources" BRANCH=$TAG fi *************** build_sources() { *** 114,120 **** # Export the current sources. inform "Retrieving release sources" ${CVS} \ ! -z 9 export -d "`basename ${SOURCE_DIRECTORY}`" \ -r ${BRANCH} gcc || \ error "Could not retrieve release sources" --- 163,169 ---- # Export the current sources. inform "Retrieving release sources" ${CVS} \ ! export -d "`basename ${SOURCE_DIRECTORY}`" \ -r ${BRANCH} gcc || \ error "Could not retrieve release sources" *************** build_sources() { *** 137,143 **** for file in *.html; do newfile=`echo $file | sed -e 's/.html//' | tr "[:lower:]" "[:upper:]"` (${ENV} TERM=vt100 lynx -dump $file \ ! | sed -e 's#file://localhost.*\(/[^/]*\)#http://gcc.gnu.org\1#g' \ > $newfile) || \ error "Could not regenerate documentation" done --- 186,192 ---- for file in *.html; do newfile=`echo $file | sed -e 's/.html//' | tr "[:lower:]" "[:upper:]"` (${ENV} TERM=vt100 lynx -dump $file \ ! | sed -e "s#file://localhost`/bin/pwd`\(.*\)#http://gcc.gnu.org\1#g" \ > $newfile) || \ error "Could not regenerate documentation" done *************** if [ -z "${RELEASE_MAJOR}" ] || [ -z "${ *** 423,432 **** error "Release number \`${RELEASE}' is invalid" fi - if [ -n "${RELEASE_REVISION}" ]; then - error "Revision releases are unsupported" - fi - # Compute the full name of the release. if [ -z "${RELEASE_REVISION}" ]; then RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}" --- 472,477 ---- *************** else *** 435,441 **** fi # Compute the name of the branch, which is based solely on the major ! # release number. BRANCH="gcc-${RELEASE_MAJOR}_${RELEASE_MINOR}-branch" # If this is not a final release, set various parameters acordingly. --- 480,486 ---- fi # Compute the name of the branch, which is based solely on the major ! # and minor release numbers. BRANCH="gcc-${RELEASE_MAJOR}_${RELEASE_MINOR}-branch" # If this is not a final release, set various parameters acordingly. *************** if [ ${FINAL} -ne 1 ]; then *** 443,449 **** RELEASE="${RELEASE}-${DATE}" FTP_PATH="${FTP_PATH}/snapshots" else ! FTP_PATH="${FTP_PATH}/releases" fi # Compute the name of the WORKING_DIRECTORY and the SOURCE_DIRECTORY. --- 488,494 ---- RELEASE="${RELEASE}-${DATE}" FTP_PATH="${FTP_PATH}/snapshots" else ! FTP_PATH="${FTP_PATH}/releases/gcc-${RELEASE}" fi # Compute the name of the WORKING_DIRECTORY and the SOURCE_DIRECTORY. diff -Nrc3pad gcc-3.0/contrib/gcc_update gcc-3.0.1/contrib/gcc_update *** gcc-3.0/contrib/gcc_update Thu Jun 14 13:53:19 2001 --- gcc-3.0.1/contrib/gcc_update Sat Jul 28 23:46:24 2001 *************** if [ $? -ne 0 ]; then *** 214,217 **** --- 214,221 ---- exit 1 fi + { + date + TZ=UTC date + } > LAST_UPDATED touch_files_reexec diff -Nrc3pad gcc-3.0/contrib/test_summary gcc-3.0.1/contrib/test_summary *** gcc-3.0/contrib/test_summary Mon May 28 08:52:20 2001 --- gcc-3.0.1/contrib/test_summary Sat Jul 28 23:46:24 2001 *************** BEGIN { *** 95,100 **** --- 95,106 ---- '${prepend_logs+" system(\"cat $prepend_logs\"); "}' } $1 ~ /\/configure$/ { + srcdir = $1; + gsub(/\/configure$/, "", srcdir); + printf "LAST_UPDATED: "; + system("tail -1 " srcdir "/LAST_UPDATED"); + print ""; + $1 = "configure flags:"; configflags = $0; gsub(/--with-gcc-version-trigger=[^ ]* /, "", configflags); gsub(/ --norecursion/, "", configflags) diff -Nrc3pad gcc-3.0/contrib/texi2pod.pl gcc-3.0.1/contrib/texi2pod.pl *** gcc-3.0/contrib/texi2pod.pl Thu May 3 12:46:27 2001 --- gcc-3.0.1/contrib/texi2pod.pl Mon Jul 2 17:50:41 2001 *************** sub postprocess *** 279,287 **** s/\@w\{([^\}]*)\}/S<$1>/g; s/\@(?:dmn|math)\{([^\}]*)\}/$1/g; - # Handle @r inside bold. - 1 while s/B<((?:[^<>]|I<[^<>]*>)*)R<([^>]*)>/B<$1>${2}B blah> into B I B to ! # match Texinfo semantics of @emph inside @samp. s/<//g; 1 while (s/B<([^<>]*)I<([^>]+)>/B<$1>I<$2>B]*)B<([^>]+)>/I<$1>B<$2>I//g; --- 300,310 ---- s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g; # Turn B blah> into B I B to ! # match Texinfo semantics of @emph inside @samp. Also handle @r ! # inside bold. s/<//g; + 1 while s/B<((?:[^<>]|I<[^<>]*>)*)R<([^>]*)>/B<$1>${2}B]*)I<([^>]+)>/B<$1>I<$2>B]*)B<([^>]+)>/I<$1>B<$2>I//g; diff -Nrc3pad gcc-3.0/faq.html gcc-3.0.1/faq.html *** gcc-3.0/faq.html Sun Jun 17 12:50:01 2001 --- gcc-3.0.1/faq.html Sun Aug 19 17:45:09 2001 *************** page.

*** 36,42 ****
  • What is an open development model?
  • How do I report a bug?
  • How do I get a bug fixed or a feature added?
  • !
  • How can I get a development environment for GCC without using CVS?
  • Installation --- 36,42 ----
  • What is an open development model?
  • How do I report a bug?
  • How do I get a bug fixed or a feature added?
  • !
  • How can I get a development environment for GCC without using CVS?
  • Installation *************** page.

    *** 58,71 ****
  • How can I run the test suite with multiple options?
  • !
  • Bugs and Non-Bugs !
      !
    1. Why can't I initialize a static variable with stdin?
    2. !
    3. Why can't I use #if here?
    4. !
    5. Problems with floating point computations
    6. !
  • ! !
  • Older versions of GCC or EGCS
    1. Why is there no testsuite in GCC 2.95?
    2. Is there a stringstream / sstream for gcc 2.95.2?
    3. --- 58,64 ----
    4. How can I run the test suite with multiple options?
    !
  • Older versions of GCC or EGCS
    1. Why is there no testsuite in GCC 2.95?
    2. Is there a stringstream / sstream for gcc 2.95.2?
    3. *************** compiler and available in /usr/local/bin *** 261,301 **** to be the older gcc2 compiler and also available in /usr/local/bin.

      The easiest way to do this is to configure the new GCC with ! --prefix=/usr/local/gcc ! and the older gcc2 with --prefix=/usr/local/gcc2. Build and install both ! compilers. Then make a symlink from /usr/local/bin/gcc to ! /usr/local/gcc/bin/gcc and from /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. ! Create similar links for the "g++", "c++" and "g77" compiler drivers.

      An alternative to using symlinks is to configure with a ! --program-transform-name option. This option specifies a sed command to ! process installed program names with. Using it you can, for instance, ! have all the new GCC programs installed as "new-gcc" and the like. You ! will still have to specify different --prefix options for new GCC and ! old GCC, because it is only the executable program names that are ! transformed. The difference is that you (as administrator) do not have ! to set up symlinks, but must specify additional directories in your (as ! a user) PATH. A complication with --program-transform-name is that the sed command invariably contains characters significant to the shell, and these have to be escaped correctly, also it is not possible to use "^" or "$" in the command. Here is the option to prefix "new-" to the ! new GCC installed programs ! "--program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'". With the above ! --prefix option, that will install the new GCC programs into ! /usr/local/gcc/bin with names prefixed by "new-". You can use ! --program-transform-name if you have multiple versions of GCC, and ! wish to be sure about which version you are invoking.

      !

      If you use --prefix, GCC may have difficulty locating a GNU assembler or linker on your system, GCC can not find GNU as/GNU ld explains how to deal with this.

      !

      Another option that may be easier is to use the --program-prefix= or ! --program-suffix= options to configure. So if you're installing GCC ! 2.95.2 and don't want to disturb the current version of GCC in ! /usr/local/bin/, you could do 'configure --program-suffix=-2.95.2 ! '. This should result in GCC being installed ! as /usr/local/bin/gcc-2.95.2 instead of /usr/local/bin/gcc.


      Dynamic linker is unable to find GCC libraries

      --- 254,305 ---- to be the older gcc2 compiler and also available in /usr/local/bin.

      The easiest way to do this is to configure the new GCC with ! --prefix=/usr/local/gcc and the older gcc2 with ! --prefix=/usr/local/gcc2. Build and install both ! compilers. Then make a symlink from /usr/local/bin/gcc ! to /usr/local/gcc/bin/gcc and from ! /usr/local/bin/gcc2 to ! /usr/local/gcc2/bin/gcc. Create similar links for the ! "g++", "c++" and "g77" compiler drivers.

      An alternative to using symlinks is to configure with a ! --program-transform-name option. This option specifies a ! sed command to process installed program names with. Using it you can, ! for instance, have all the new GCC programs installed as "new-gcc" and ! the like. You will still have to specify different ! --prefix options for new GCC and old GCC, because it is ! only the executable program names that are transformed. The difference ! is that you (as administrator) do not have to set up symlinks, but ! must specify additional directories in your (as a user) PATH. A ! complication with --program-transform-name is that the sed command invariably contains characters significant to the shell, and these have to be escaped correctly, also it is not possible to use "^" or "$" in the command. Here is the option to prefix "new-" to the ! new GCC installed programs: !

      ! --program-transform-name='s,\\\\(.*\\\\),new-\\\\1,' !
      ! With the above --prefix option, that will install the new ! GCC programs into /usr/local/gcc/bin with names prefixed ! by "new-". You can use --program-transform-name if you ! have multiple versions of GCC, and wish to be sure about which version ! you are invoking.

      !

      If you use --prefix, GCC may have difficulty locating a GNU assembler or linker on your system, GCC can not find GNU as/GNU ld explains how to deal with this.

      !

      Another option that may be easier is to use the ! --program-prefix= or --program-suffix= ! options to configure. So if you're installing GCC 2.95.2 and don't ! want to disturb the current version of GCC in ! /usr/local/bin/, you could do !

      ! configure --program-suffix=-2.95.2 <other configure options> !
      ! This should result in GCC being installed as ! /usr/local/bin/gcc-2.95.2 instead of ! /usr/local/bin/gcc.


      Dynamic linker is unable to find GCC libraries

      *************** as /usr/local/bin/gcc-2.95.2 instead of *** 303,309 ****

      This problem manifests itself by programs not finding shared libraries they depend on when the programs are started. Note this problem often manifests itself with failures in the libio/libstdc++ ! tests after configuring with --enable-shared and building GCC.

      GCC does not specify a runpath so that the dynamic linker can find dynamic libraries at runtime.

      --- 307,313 ----

      This problem manifests itself by programs not finding shared libraries they depend on when the programs are started. Note this problem often manifests itself with failures in the libio/libstdc++ ! tests after configuring with --enable-shared and building GCC.

      GCC does not specify a runpath so that the dynamic linker can find dynamic libraries at runtime.

      *************** NFS server goes down.

      *** 317,325 **** programs are going to hang no matter what you do. The problem is programs that do not require the directories.

      !

      SunOS effectively always passed a -R option for every -L option; ! this was a bad idea, and so it was removed for Solaris. We should ! not recreate it.

      However, if you feel you really need such an option to be passed automatically to the linker, you may add it to the GCC specs file. --- 321,329 ---- programs are going to hang no matter what you do. The problem is programs that do not require the directories.

      !

      SunOS effectively always passed a -R option for every ! -L option; this was a bad idea, and so it was removed for ! Solaris. We should not recreate it.

      However, if you feel you really need such an option to be passed automatically to the linker, you may add it to the GCC specs file. *************** with -fPIC, once with

      This technique is particularly useful on multilibbed targets.

      - -
      - -

      Bugs and Non-Bugs

      - -

      Unfortunately, improvements in tools that are widely used are - sooner or later bound to break something. Sometimes, the - code that breaks was wrong, and then that code should be fixed, even - if it works for earlier versions of GCC or other compilers. The - following problems with some releases of widely used packages have - been identified:

      - -

      There is a separate list of well-known bugs - describing known deficiencies. Naturally we'd like that list to be of - zero length.

      - -

      To report a bug, see How to report bugs.

      - -
      -

      Why can't I initialize a static variable with stdin?

      - -

      This has nothing to do with GCC, but people ask us about it a - lot. Code like this:

      - -
      -   #include <stdio.h>
      - 
      -   FILE *yyin = stdin;
      - 
      - -

      will not compile with GNU libc (Linux libc6), because - stdin is not a constant. This was done deliberately, in - order for there to be no limit on the number of open FILE objects. It - is surprising for people used to traditional Unix C libraries, but it - is permitted by the C standard.

      - -

      This construct commonly occurs in code generated by old versions of - lex or yacc. We suggest you try regenerating the parser with a - current version of flex or bison, respectively. In your own code, the - appropriate fix is to move the initialization to the beginning of - main.

      - -

      There is a common misconception that the GCC developers are - responsible for GNU libc. These are in fact two entirely separate - projects. The appropriate place to ask questions relating to GNU libc - is libc-alpha@sources.redhat.com. -

      - -
      -

      Why can't I use #if here?

      - -

      Let me guess... you wrote code that looks something like this:

      -
      -   memcpy(dest, src,
      - #ifdef PLATFORM1
      - 	 12
      - #else
      - 	 24
      - #endif
      - 	);
      - 
      -

      and you got a whole pile of error messages:

      -
      - test.c:11: warning: preprocessing directive not recognized within macro arg
      - test.c:11: warning: preprocessing directive not recognized within macro arg
      - test.c:11: warning: preprocessing directive not recognized within macro arg
      - test.c: In function `foo':
      - test.c:6: undefined or invalid # directive
      - test.c:8: undefined or invalid # directive
      - test.c:9: parse error before `24'
      - test.c:10: undefined or invalid # directive
      - test.c:11: parse error before `#'
      - 
      - -

      The problem, simply put, is that GCC's preprocessor does not allow - you to put #ifdef (or any other directive) inside the arguments of a - macro. Your C library's string.h happens to define - memcpy as a macro - this is perfectly legitimate. The code - therefore will not compile.

      - -

      We have two good reasons for not allowing directives inside - macro arguments. First, it is not portable. It is "undefined - behavior" according to the C standard; that means different - compilers will do different things with it. Some will give you - errors. Some will dump core. Some will silently mangle your code - - you could get the equivalent of

      -
      - 	memcpy(dest, src, 1224);
      - 
      -

      from the above example. A very few might do what you expected it - to. We therefore feel it is most useful for GCC to reject this - construct immediately so that it is found and fixed.

      - -

      Second, it is extraordinarily difficult to implement the - preprocessor such that it does what you would expect for every - possible directive found inside a macro argument. The best example is - perhaps

      -
      - #define foo(arg) ... arg ...
      - foo(blah
      - #undef foo
      - blah)
      - 
      -

      which is impossible to implement in portable C without - leaking memory. Allowing only a subset of directives would be - confusing.

      - -

      It is always possible to rewrite code which uses conditionals - inside macros so that it doesn't. You could write the above - example

      -
      - #ifdef PLATFORM1
      -    memcpy(dest, src, 12);
      - #else
      -    memcpy(dest, src, 24);
      - #endif
      - 
      -

      This is a bit more typing, but I personally think it's better style - in addition to being more portable. - -

      In recent versions of glibc, printf is among the - functions which are implemented as macros. - -

      Problems with floating point computations

      - -

      In a number of cases, GCC appears to perform floating point - computations incorrectly. For example, the program

      -
      - #include <iostream>
      - 
      - int main() {
      - 
      -  double min = 0.0;
      -  double max = 0.5;
      -  double width = 0.01;
      -  std::cout <<  (int)(((max - min) / width) - 1) << std::endl;
      - 
      - }
      - 
      -

      might print 50 on some systems and optimization levels, and 51 on - others.

      - -

      The is the result of rounding: The computer cannot - represent all real numbers exactly, so it has to use - approximations. When computing with approximation, the computer needs - to round to the nearest representable number.

      - -

      This is not a bug in the compiler, but an inherent limitation of - the float and double types. Please study - this paper - for more information.


      --- 453,458 ---- diff -Nrc3pad gcc-3.0/gcc/ChangeLog gcc-3.0.1/gcc/ChangeLog *** gcc-3.0/gcc/ChangeLog Sun Jun 17 12:39:41 2001 --- gcc-3.0.1/gcc/ChangeLog Sun Aug 19 14:08:08 2001 *************** *** 1,6 **** 20010617 Release Manager ! * GCC 3.0 Released. 2001-06-15 Andreas Jaeger --- 1,984 ---- + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-19 Release Manager + + * GCC 3.0.1 Released. + + 2001-08-17 Janis Johnson + + * doc/install.texi (Install GCC): Add links to build status pages. + (Specific): Ditto. + (Final install): Ditto; request updates for specific info + + 2001-08-17 Gerald Pfeifer + + * doc/invoke.texi (Optimize Options): The default for + -finline-limit is 600. + + 2001-08-16 Joel Sherrill + + * config/rs6000/rtems.h: Set STARTFILE_DEFAULT_SPEC and + ENDFILE_DEFAULT_SPEC to correctly include ecrti and ecrtn. + * config/arm/rtems-elf.h: Remove bad -Darm and -Darm_elf. + + 2001-08-14 Ulrich Weigand + + * config/s390/linux64.h (CPP_PREDEFINES): Define __s390__ + also on 64-bit s390x targets. + + 2001-08-14 Gerald Pfeifer + + * doc/install.texi (Specific, avr): Fix markup. + (Specific, c4x): Ditto. + + 2001-08-13 Andreas Jaeger + + * config.gcc: Use t-slibgcc-elf to build shared libgcc_s on + s390*linux. + + 2001-08-13 Roman Zippel + Richard Henderson + + * regmove.c (regmove_optimize): Avoid setting a register twice in + a parallel set. + + 2001-08-12 David Edelsohn + + Revert: + 2001-08-02 Rainer Orth + * gcc.c (set_collect_gcc_options): New function, split out from + main. + Ignore elided switches. + (do_spec_1): Invoke before executing command. + (set_input): Export. + Move declaration ... + * gcc.h (set_input): ... here. + * config/alpha/osf.h (ASM_FINAL_SPEC): Use %U.s to refer to input + file. + + 2001-08-11 Gerald Pfeifer + + * doc/install.texi (Specific, c4x): Fix cross-reference to the + main manual to work both for info and HTML versions. + + 2001-08-10 Ulrich Weigand + + * glimits.h (__LONG_MAX__): Add s390x as 64-bit architecture. + + * config/s390/s390.c (legitimize_pic_address): Don't generate + unnecessary moves (to avoid confusing loop optimization). + (check_and_change_labels): Replace jump_long by indirect_jump. + (s390_final_chunkify): Don't start a new literal pool on section + switch in 64-bit code. + (s390_va_start, s390_va_arg): Fixed incorrect sizes for 64-bit. + + * config/s390/s390.h (HARD_REGNO_MODE_OK, RETURN_IN_MEMORY): + Support complex integer modes correctly. + (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Remove CC_REGS. + (EH_RETURN_HANDLER_RTX): Fixed incorrect offset for 64-bit. + (CONST_COSTS): Fixed incorrect costs. + + * config/s390/s390.md (divsi3, modsi3): Clobber low word of + divmoddisi3 before shifting (to avoid confusing flow analysis). + (cjump_long, icjump_long, jump_long, indirect_jump, casesi_jump): + Never use "address_operand" without "p" or "memory_operand" + without mode. + (builtin_setjmp_setup, builtin_setjmp_receiver, builtin_longjmp): + Fixed broken setjmp/longjmp handling. + (do_builtin_setjmp_setup): Removed. + + 2001-08-10 John David Anglin + + * doc/install.texi (vax-dec-ultrix): Change `Vax' to VAX. + + 2001-08-10 Gerald Pfeifer + + * doc/install.texi (Specific, avr): Fix cross-reference to the + main manual to work both for info and HTML versions. + + 2001-08-09 Jakub Jelinek + + * config/ia64/fde-glibc.c: Require glibc 2.2.4+ headers. + (find_fde_for_dso): Remove. + (_Unwind_IteratePhdrCallback): New. + (_Unwind_FindTableEntry): Use dl_iterate_phdr. + * config/ia64/crtbegin.asm (__ia64_app_header): Remove. + + 2001-08-08 Kelley Cook + + * Makefile.in: Move many of the *_H definitions eariler in the file, + so that rules in t-* files that use them for dependencies will work + in a parallel build. + * config/i386/t-cygwin (winnt.o): Depend on $(CONFIG_H). + + 2001-08-08 Mark Mitchell + + * except.c (remove_fixup_regions): Fix typo. + + 2001-08-07 Daniel Jacobowitz + + * config.gcc: Quote target_cpu_default2 correctly for + powerpc*-*-* targets. + + 2001-08-07 David Edelsohn + + * doc/install.texi: Document fine-grained multilib configuration. + + 2001-08-06 Richard Henderson + + * config/i386/i386.h (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN): New. + * function.c (expand_main_function): Implement it. + * doc/tm.texi: Document it. + + * i386-protos.h, i386.c, i386.h, osf1elf.h, osfrose.h: Revert 08-01 + ix86_output_main_function_alignment_hack patch. + + 2001-08-06 Richard Henderson + + 2001-07-23 Richard Henderson + * config/i386/i386.c (ix86_expand_setcc): Don't use method 0 + before CSE. + * config/i386/i386.md: New setcc+movzbl peephole2. + + 2001-07-22 Richard Henderson + * fold-const.c (fold): Test vs FLOAT_TYPE_P instead of + INTEGRAL_TYPE_P when folding comparisons with operand_equal_p + arguments. + + 2001-08-06 John David Anglin + + * varasm.c (output_constant_def_contents): Use for the length of a + string constant either its TREE_STRING_LENGTH or its int_size_in_bytes + depending on which is larger. + + 2001-08-04 Hans-Peter Nilsson + + * doc/extend.texi (Other Builtins): Fix typo in last change. + + 2001-08-04 Stephane Carrez + + * config/m68hc11/m68hc11.md ("cmphi_1", "cmpqi_1"): Allow memory + and soft register for operand 0. + ("cmphi_z_used", "cmpqi_z_used"): Allow memory for operand 0. + + 2001-08-04 Stephane Carrez + + * config/m68hc11/m68hc11.md ("bitcmpqi"): Allow memory and soft + register for operand 0. + ("bitcmpqi_z_used"): Allow memory for operand 0. + (split "bitcmpqi"): New split to handle address reg as operand 1. + + 2001-08-03 Zack Weinberg + + * builtins.c (fold_builtin_constant_p): Return integer_zero_node + for complex expressions when cfun == 0. + * doc/extend.texi: Document that __builtin_constant_p can be + used in data initializers as well as functions. + + 2001-08-03 Richard Henderson + + * except.c (collect_one_action_chain): Add an explicit cleanup + action if regions surrounding a catch were encoded entirely + within the call-site entry. + + 2001-08-03 Stephane Carrez + + * config/m68hc11/t-m68hc11-gas (T_CPPFLAGS): Add _ctor and _dtor. + * config/m68hc11/larith.asm (_exit): Split in several sub-sections + merged by linker script to get a final _exit(). + (__do_global_dtors): New for destructor handling in specific exit + section. + (__do_global_ctors): New for constructors in specific install section. + (__map_data_section): Map data sections before running constructors. + * config/m68hc11/m68hc11.h (INT_ASM_OP): Define to use .word. + (CTORS_SECTION_ASM_OP): Define to put in readonly section. + (DTORS_SECTION_ASM_OP): Likewise. + (CTORS_SECTION_FUNCTION): Define to force a reference to + __do_global_ctors. + (DTORS_SECTION_FUNCTION): Likewise for __do_global_dtors. + + 2001-08-03 Ulrich Weigand + + * config.gcc (s390-*-linux*, s390x-*-linux*): Added. + * doc/install.texi: Add s390 and s390x targets. + * doc/invoke.texi: Add s390 and s390x target options. + * doc/md.texi: Add s390 and s390x extra constraints. + * config/s390/s390.c: New. Subroutines for code generation. + * config/s390/s390.h: New. Definitions for S/390. + * config/s390/s390-protos.h: New. Prototypes. + * config/s390/linux.h: New. Definitions for Linux for S/390. + * config/s390/linux64.h: New. Definitions for Linux for zSeries. + * config/s390/t-linux: New. Makefile fragment. + * config/s390/s390.md: New. Machine description for S/390 and zSeries. + * config/s390/xm-390.h: New. Host definitions for S/390. + * config/s390/xm-390x.h: New. Host definitions for zSeries. + * config/s390/fixdfdi.h: New. Fix L_fix*di. + + 2001-08-03 Neil Booth + + * cpplex.c (parse_string): Warn once per string. + * cpplib.c (_cpp_do_file_change): Call hook correctly. + + 2001-08-03 Rainer Orth + + * doc/install.texi (Configuration): Fix markup. + (Specific, i?86-*-udk): Likewise. + (Specific, alpha*-dec-osf*): Warn against --with-gnu-as, + --with-gnu-ld. + Document --enable-threads and --enable-libgcj status. + (Specific, mips-sgi-irix*): Canonicalize triples. + (Specific, mips-sgi-irix5): Warn about problems with this config. + Mention required GNU as patch. + Native assembler problems are fixed. + (Specific, mips-sgi-irix6): Update O32 ABI support status. + Document --enable-threads and --enable-libgcj status. + + 2001-08-02 David Edelsohn + + * doc/install.texi (Install GCC: Binaries): Update Bull info. + + 2001-08-02 Nathan Sidwell + + Remove -fhonor-std. + * doc/invoke.texi (C++ Dialect Options): Remove -fno-honor-std. + + 2001-08-02 Rainer Orth + + * gcc.c (set_collect_gcc_options): New function, split out from + main. + Ignore elided switches. + (do_spec_1): Invoke before executing command. + (set_input): Export. + Move declaration ... + * gcc.h (set_input): ... here. + * config/alpha/osf.h (ASM_FINAL_SPEC): Use %U.s to refer to input + file. + + 2001-08-01 Hartmut Penner + + * varasm.c (decode_rtx_const): Allow unspec (symbol_ref) in + constant pool to be identical by string address and index. + + 2001-08-01 Gerald Pfeifer + + * params.def (PARAM_MAX_INLINE_INSNS): Change default to 600. + Correct comment that had been missed in the previous change. + + 2001-08-01 Robert Lipe + + * dwarfout.c: Remove reference to README.DWARF. + + 2001-08-01 Richard Henderson + + * rtl.c (read_name): Consider \r whitespace. + + 2001-08-01 Mark Kettenis + + * unwind-pe.h (base_of_encoded_value, read_encoded_value): Define + only if NO_BASE_OF_ENCODED_VALUE isn't defined. + * unwind-dw2-fde.c (NO_BASE_OF_ENCODED_VALUE): Define before + including "unwind-pe.h". + + Wed Aug 1 20:15:33 CEST 2001 Jan Hubicka + + * i386-protos.h (ix86_output_main_function_alignment_hack): Declare. + * i386.c (ix86_output_main_function_alignment_hack): New global + function. + * i386.h (FUNCTION_PROLOGUE): New macro. + * osf1elf.h (FUNCTION_PROLOGUE): Call new function. + * osfrose.h (FUNCTION_PROLOGUE): Likewise. + + 2001-08-01 H.J. Lu + + * config/mips/linux.h (ASM_OUTPUT_IDENT): Defined. + + 2001-08-01 H.J. Lu + + * gcc/config/mips/linux.h (ASM_OUTPUT_SOURCE_LINE): Defined. + + 2001-07-31 Jeff Sturm + + * except.c (duplicate_eh_regions): Test n_array[i] for NULL. + + 2001-07-30 Roman Zippel + + * config/m68k/m68k.md: Replace all general_operand with + nonimmediate_operand for all destinations. + * config/m68k/m68k.c: Include expr.h and reload.h. + (not_sp_operand): Check nonimmediate_operand. + + 2001-07-30 Roman Zippel + + * config/m68k/m68k.h (TARGET_SWITCHES/TARGET_OPTIONS): + Add missing doc strings. + * config/m68k/linux-aout.h (SUBTARGET_SWITCHES): Likewise. + * config/m68k/linux.h (SUBTARGET_SWITCHES): Likewise. + + 2001-07-30 H.J. Lu + + * config/mips/linux.h (CPLUSPLUS_CPP_SPEC): Add -D_GNU_SOURCE. + (ASM_DECLARE_FUNCTION_NAME): Defined. + (ASM_DECLARE_FUNCTION_SIZE): Likewise. + (FUNCTION_NAME_ALREADY_DECLARED): Likewise. + + 2001-07-30 Janis Johnson + + * profile.c (branch_prob): Fix .bbg info for computed gotos + and C++ EH code. + + 2001-07-28 Golubev I. N. + + * config/i386/sco5.h (DWARF2_DEBUGGING_INFO): Define. + + 2001-07-27 Gerald Pfeifer + + * doc/install.texi (Configuration): Properly link the host + specific instructions also when generating HTML. + + 2001-07-26 Rainer Orth + + * glimits.h (_MACH_MACHLIMITS_H_): Delete. + + Thu Jul 26 22:01:30 2001 Denis Chertykov + + * cse.c (cse_process_notes): Replace any registers if the address + remains valid. + + 2001-07-26 Rainer Orth + + * Makefile.in (LIBICONV): Define. + + 2001-07-26 Andrew MacLeod + + * params.def (PARAM_MAX_PENDING_LIST_LENGTH): Add parameter to + limit length of dependancy flush list. + * params.h (MAX_PENDING_LIST_LENGTH): Define. + * sched-int.h (struct deps): Add pending_flush_length field. + * sched-deps.c (flush_pending_lists): Last_pending_memory_flush now + has 1 element in it. + (sched_analyze_1): Use MAX_PENDING_LIST_LENGTH. + (sched_analyze): After a jump, if the pending memory flush list is too + large, flush the pending lists. + (init_deps): Initialize pending_flush_length to 0. + * doc/invoke.texi (max_pending_list_length): Document parameter. + + 2001-07-25 Richard Henderson + + * varasm.c (assemble_variable): Create DECL_RTL before setting + TREE_ASM_WRITTEN. + + 2001-07-25 Andrew MacLeod + Janis Johnson + + * stmt.c (expand_goto): A nonlocal goto can be a call too. + * builtins.c (expand_builtin_longjmp): Reverse label and static chain + pointer parameters to match documented usage of nonlocal_goto. + * config/ia64/ia64.md (nonlocal_goto): Revert label and static chain + parameters to their correct order. + * config/sparc/sparc.md (nonlocal_goto): Revert label and static chain + parameters to their correct order. + + 2001-07-25 Andrew MacLeod + + * config/ia64/ia64.h (STRIP_NAME_ENCODING): Strip out '*' as well. + + 2001-07-24 Joel Sherrill + + * config/i960/i960.h (CPP_SPEC): Define _SOFT_FLOAT for -msoft-float. + + 2001-07-24 Joel Sherrill + + * config/sparc/rtems.h (CPP_PREDEFINES): Remove redundant + -Acpu and -Amachine.h. + * config/sparc/rtemself.h (CPP_PREDEFINES): Likewise. + Corrected header to say ELF not a.out. + * config/sparc/sparc.h (CPP_CPU_SPEC): Define _SOFT_FLOAT + when given -msoft-float. + + 2001-07-24 Joel Sherrill + + * config.gcc (arm*-*-rtems*): Include crtinit.o and crtfini.o as + extra multilib parts like arm-elf. + (i960-*-coff*, i960-*-rtems): Should not use collect2. + (m68020-*-elf*, m68k-*-elf*, m68k-*-rtems*): Include crtinit.o and + crtfini.o as extra multilib parts. + + 2001-07-24 Joel Sherrill + + * configure.in: Add rtems as a supported thread model. + * gthr-rtems.h: Add missing entry point __gthread_active_p. + * configure: Rebuilt. + + 2001-07-24 Rainer Orth + + * config/mips/irix6-libc-compat.c: New file. + * config/mips/t-iris6 (LIB2FUNCS_STATIC_EXTRA): Use it. + * doc/install.texi (Specific, mips*-sgi-irix6): Mention structure + passing workaround. + + 2001-07-23 Kazu Hirata + + * reload.c: Fix comment typos. + + 2001-07-23 Richard Henderson + + * config/i386/i386.c (ix86_expand_setcc): Don't use method 0 + before CSE. + * config/i386/i386.md: New setcc+movzbl peephole2. + + 2001-07-23 lars brinkhoff + + * tm.texi (TARGET_FLOAT_FORMAT): Document IBM_FLOAT_FORMAT + and C4X_FLOAT_FORMAT. + (BOOL_TYPE_SIZE): Document. + + 2001-07-22 Richard Henderson + + * fold-const.c (fold): Test vs FLOAT_TYPE_P instead of + INTEGRAL_TYPE_P when folding comparisons with operand_equal_p + arguments. + + 2001-07-22 Alexandre Oliva + + * config/i386/freebsd-aout.h (ASM_PREFERRED_EH_DATA_FORMAT): Use + the definition in defaults.h. + + 2001-07-22 Richard Henderson + + * regrename.c (regrename_optimize): Compute nregs for each + potential target register. + + 2001-07-20 Stephane Carrez + + * config/m68hc11/m68hc11.md ("andqi3"): Accept d as second operand. + ("iorqi3"): Likewise. + ("xorqi3"): Likewise. + ("*addhi3"): Fix constraint to avoid reloading in a soft register. + ("*subhi3_sp): Likewise. + ("*subhi3"): Likewise. + ("extendhisi2"): Accept D, X and Y as source operand to avoid + reload problems. + + 2001-07-20 Bruce Korb + + * fixinc/fixincl.c(test_for_changes): force unsigned char comparisons + because getc() and char* may disagree on signedness. + + 2001-07-20 Richard Henderson + + Wed May 9 10:40:25 2001 Alexandre Oliva + * regclass.c (scan_one_insn): Update REG_N_REFS when optimizing + handling of two-address insns. + + 2001-07-20 Stephane Carrez + + * config/m68hc11/m68hc11.md ("movdi", "movdi_internal"): Use an + expand to emit the pattern; put a REG_INC note for push/pop + instructions. + ("movdf", "movdf_internal"): Likewise. + ("movsi", "movsi_internal"): Likewise. + ("movsf", "movsf_internal"): Likewise. + ("movhi", "movqi"): Emit a REG_INC note for push/pop instructions. + + 2001-07-20 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Don't use + gen_highpart. + + 2001-07-20 Daniel Berlin + + * params.def: Change default max inline insns to 100. + + 2001-06-20 Kelley Cook + + * doc/install.texi (sparc-sun-solaris*): Add in 4.x assembler bug + information. Move rest into ... + (*-*-solaris): ... here. Eliminate redundant information and + reword necessary packages section. Delete 4.x assembler bug info. + (sparc-sun-*): Merge into ... + (sparc-sun-sunos*): here. + + 2001-07-19 Mark Mitchell + + * reorg.c (fill_simple_delay_slots): If an instruction might throw + an exception that will be caught within this function, do not fill + its delay slot with any subsequent instruction. + + 2001-07-19 Mark Kettenis + Jakub Jelinek + + * unwind-dw2.c (_Unwind_FrameState): Add eh_ptr. + (extract_cie_info): Handle "eh" augmentation properly, + remember eh_ptr. + (struct frame_state, __frame_state_for): New. + + 2001-07-19 Rainer Orth + + * config/alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL, + HANDLE_SYSV_PRAGMA): Define. + * mips-tfile.c (add_ext_symbol): Pass complete symbol ptr, inline + previous args. + (copy_object): Caller changed. + + 2001-07-19 Andreas Schwab + + * configure.in (assembler dwarf2 debug_line support): Define nop + insn for m68k. + * configure: Regenerated. + + 2001-07-18 Jeff Sturm + + * dwarf2out.c (dwarf2out_abstract_function): Don't emit + in-class declaration at -g1. Fixes c++/2814. + + 2001-07-18 Rainer Orth + + * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Check for ASM_WEAKEN_LABEL. + + 2001-07-18 Andreas Schwab + + * configure.in (assembler eh_frame optimization): Handle big + endian. + * configure: Regenerated. + + 2001-07-18 Tom Tromey + + For PR java/2812: + * configure: Rebuilt. + * configure.in: Don't check for iconv.h or iconv(); use AM_ICONV + instead. + * aclocal.m4 (AM_ICONV): New macro from Bruno Haible. + + Wed Jul 18 12:05:29 2001 Nicola Pero + + * gthr-posix.h (__gthread_objc_mutex_trylock): Fixed return value + on error. We can't blindly return the result of + pthread_mutex_trylock because it returns a positive number on + error, while we must return -1 on error. + (__gthread_objc_mutex_lock, __gthread_objc_mutex_unlock): Similar + fixes. + Reported by Stephen Brandon . + + 2001-07-17 H.J. Lu + Rainer Orth + + * c-pragma.h (HANDLE_PRAGMA_WEAK): Define iff ASM_WEAKEN_LABEL and + ASM_OUTPUT_WEAK_ALIAS are defined. + * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Define if possible. + * config/mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL): + Moved ... + * config/mips/iris5.h: ... here. + (HANDLE_SYSV_PRAGMA): Defined as 1. + * varasm.c (weak_finish): Use ASM_OUTPUT_WEAK_ALIAS. + * doc/tm.texi (ASM_OUTPUT_WEAK_ALIAS): Support the undefined weak + symbol. + + 2001-07-15 Richard Henderson + + * config/alpha/alpha.c (alpha_emit_xfloating_compare): Use CCmode + instead of COMPARE for the EQUIV expression. + + 2001-07-14 David Edelsohn + + * rs6000.c (reg_or_{add,sub}_cint64_operand): New predicates. + (add_operand): Compare CONST_INT with fewer function calls. + (print_operand, case 'p'): Ensure positive operand. + * rs6000.h (CONST_OK_FOR_LETTER_P, case 'N'): Ensure positive value. + (PREDICATE_CODES): Add new predicates. + * rs6000.md (addsi3): Split 32-bit constants more correctly. + (divsi3, modsi3): Ensure positive power-of-2. + (adddi3): Use new predicate. Split 32-bit constants more + correctly. Re-arrange splitter to handle any constant. + (subdi3): Use new predicate. + (divdi3, moddi3): Ensure positive power-of-2. + + 2001-07-13 Kazu Hirata + + * jump.c (reversed_comparison_code_parts): Fix comment typos. + + 2001-07-13 Marc Espie + + * config.gcc (*-*-openbsd*): Add fragment to compile libgcc + correctly for shared configurations. + * config/t-libgcc-pic: New. + * config/{i386,m68k,sparc}/t-openbsd: New. + * config/openbsd.h: Include cpu_spec in cpp_spec where needed. + Support -shared. Support debugging libraries with -g. + * config/i386/openbsd.h: Correct ASM_COMMENT_START. Ensure dwarf2 + frame information does not emit pointer diffs. + * config/sparc/openbsd.h: Ensure dwarf2 frame information does not + emit pointer diffs. + + 2001-07-13 David Edelsohn + + * combine.c (try_combine): Ensure const_int pow2 is positive. + + 2001-07-11 Kazu Hirata + + * recog.c (validate_change): Fix a comment typo. + + 2001-07-11 Mark Mitchell + + * stmt.c (parse_output_constraint): New function, split out + from ... + (expand_asm_operands): ... here. Use parse_output_constraint. + * tree.h (parse_output_constraint): Declare it. + + 2001-07-10 Kazu Hirata + + * calls.c (emit_library_call_value_1): Fix a comment typo. + * dwarf2out.c (mem_loc_descriptor): Likewise. + + 2001-07-09 Kazu Hirata + + * config/h8300/t-h8300 (LIB1ASMFUNCS): Add _floatdisf and _fixsfdi. + * config/mn10200/t-mn10200 (LIB1ASMFUNCS): Likewise. + + 2001-07-09 Joseph S. Myers + + * doc/c-tree.texi: Document representation of attributes. + + 2001-07-08 Joseph S. Myers + + * doc/tm.texi: Fix typo. + + 2001-07-07 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_initial_elimination_offset): + Take into account m68hc11_sp_correction for FRAME_POINTER_REGNUM + elimination. + * config/m68hc11/m68hc11.h (STARTING_FRAME_OFFSET): Use 0. + + 2001-07-06 Richard Henderson + + * except.h (MUST_USE_SJLJ_EXCEPTIONS): Examine the value of + DWARF2_UNWIND_INFO not just whether it is defined. + + 2001-07-06 DJ Delorie + + * doc/gcc.texi (Makefile): Rename to be a more general purpose + chapter about various build hints and history. Add section + talking about the various types of native and cross builds. + + 2001-07-05 David Edelsohn + + * doc/install.texi (Install GCC: Binaries): Fix typo. + + 2001-07-04 Stephane Carrez + + * config/m68hc11/m68hc11.md ("*ashlsi3"): Operand 1 can be a memory + reference using the stack pointer, adjust it since we push Y + temporarily. + ("*ashrsi3"): Likewise. + ("*lshrsi3"): Likewise. + + 2001-07-05 Stephane Carrez + + * config/m68hc11/m68hc11.h (RETURN_ADDR_RTX): Fix return address + when -fomit-frame-pointer is used. + + 2001-07-05 Brad Lucier + Gerald Pfeifer + + * doc/invoke.texi (Optimize Options): Document that -fgcse may + cause programs using computed gotos to run more slowly. + + 2001-07-04 Rainer Orth + + * doc/install.texi (Specific): Markup, spelling and typo fixes. + Fixed sorting. + Consistently require binutils 2.11.2, not prereleases. + (Specific, decstation-*): Canonicalize as mips-dec-*. + (Specific, i?86-*-sco3.2v5*): Remove make bootstrap requirement, + always necessary. + (Specific, m68k-altos): Removed reference to README.altos, deleted. + (Specific, mips-*): Reword MIPS C compiler requirements. + (Specific, powerpc*-*-*): New, mention --with-cpu once. + (Specific, sunv5): Removed, obsolete. + + 2001-07-04 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Remove an extra operand + from shll. + + 2001-07-04 Joseph S. Myers + + * doc/include: New directory. + * doc/fdl.texi: Move to doc/include/fdl.texi. + * doc/texinfo.tex: Move to doc/include/texinfo.tex. + * doc/include/funding.texi, doc/include/gpl.texi: New files. + * doc/gcc.texi: Use funding.texi and gpl.texi. + * Makefile.in ($(docdir)/cpp.info, $(docdir)/gcc.info, + $(docdir)/cppinternals.info, cpp.dvi. gcc.dvi. cppinternals.dvi): + Update dependencies and use -I $(docdir)/include. + + 2001-07-04 Gerald Pfeifer + + * doc/install.texi (sparc64-*-*): Remove garbage. + + 2001-07-04 Gerald Pfeifer + + * doc/install.texi (Specific): Update information for *-*-solaris*. + + 2001-07-03 Jan Hubicka + + * optabs.c (expand_twoval_binop): Avoid undefined behaviour. + + 2001-07-03 Rainer Orth + + * config/i386/sol2.h (ASM_PREFERRED_EH_DATA_FORMAT): Define. + Fixes PRs bootstrap/3067, bootstrap/3249, bootstrap/3275. + + 2001-07-03 Joseph S. Myers + + * doc/cppinternals.texi: Improve formatting and logical markup. + + 2001-07-03 Joseph S. Myers + + * doc/cppinternals.texi: Merge from mainline. + + * doc/extend.texi, doc/gcc.texi, doc/invoke.texi, doc/md.texi, + doc/rtl.texi, doc/tm.texi: Improve formatting. Improve + documentation of -std and -Wwrite-strings. + * doc/cpp.1, doc/gcc.1: Regenerate. + + 2001-07-02 Rainer Orth + + * doc/install.texi: Various spelling and markup fixes. + (Installing GCC): Component specific installation instructions are + gone. + Fix reference. + Warn about removing old install dir in the presence of shared libs. + (Configuration): Invoke with options target to match configure + --help. + Consistently refer to gas, gld pathnames. + Invert --enable-multilib documentation. + Remove references to old compiler versions. + + 2001-07-02 Rainer Orth + + * doc/install.texi (Specific, mips*-sgi-irix4): Split from IRIX 5 + section. + (Specific, mips*-sgi-irix5): Note IDO download. + Reworded MIPS C hints. + Use GNU as instead of GAS. + Markup fixes. + Removed SGI Freeware reference, IRIX 6 only. + (Specific, mips*-sgi-irix6): Removed ranlib caveats, obsolete. + Note N64 library requirement/workaround. + Update O32 hints. + Complete list of structure passing bug victims. + + 2001-07-02 Gerald Pfeifer + + * doc/install.texi: Remove CVS Id. + + 2001-07-01 Mark Mitchell + + * expr.c (expand_expr, case ARRAY_REF): Correct check for + side-effects in the value of an array element. + + 2001-06-29 Rainer Orth + + * objc/objc-act.c (handle_class_ref): Always place decl in + variable section. + (handle_impent): Always place decl in readonly data section. + Fixes PRs libobjc/917, libobjc/3237, bootstrap/3251. + + 2001-06-29 Alan Modra + + * recog.c (validate_replace_rtx_1): Exit early if nothing changed + in args of commutative of comparison operations. + + 2001-06-28 Rainer Orth + + * gthr-posix.h [LIBOBJC]: Add weak definitions of + sched_get_priority_max, sched_get_priority_min. + + Thu Jun 28 11:32:24 CEST 2001 Jan Hubicka + + * i386.c (x86_use_loop): Disable for K6 temporarily. + + 2001-06-27 Bruce Korb + + * fixinc/inclhack.def(hpux11_cpp_pow_inline): new, but real similar to + hpux10_cpp_pow_inline. Not similar enough. + (solaris_mutex_init): renamed. PTHREAD_*_INITIALIZER is a problem for + all Solaris versions. This fix patches MUTEX and COND initializers, + the RWLOCK one will wait for someone to complain. For now, anyway. + (uw7_byteorder_fix): It was looking for the byteorder.h file in the + wrong directory. + + Thu Jun 28 00:31:24 2001 Denis Chertykov + + * config/avr/avr.md (strlenhi): PARALLEL keyword removed. + * config/avr/avr.c (legitimate_address_p): Return value changed + from letter to register classes. For better debugging. + + 2001-06-27 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/cpp.texi, + doc/cppinternals.texi, doc/extend.texi, doc/gcc.texi, + doc/gcov.texi, doc/install-old.texi, doc/install.texi, + doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Replace + . at end of sentences preceded by a capital letter with @.. + + 2001-06-18 Jason Merrill + + * expr.c (clear_storage): Set TREE_NOTHROW on the decl for memset. + (emit_block_move): Likewise. + + 2001-06-27 Joseph S. Myers + + * doc/cpp.texi, doc/cppinternals.texi, doc/extend.texi, + doc/gcc.texi, doc/install.texi, doc/invoke.texi, doc/md.texi, + doc/tm.texi: Use @: where necessary when a full stop does not end + a sentence. + + 2001-06-27 Joseph S. Myers + + * doc/gcc.texi, doc/install.texi, doc/invoke.texi: Remove trailing + whitespace. + + 2001-06-26 Joseph S. Myers + + * doc/c-tree.texi, doc/cpp.texi, doc/extend.texi, doc/gcc.texi, + doc/install.texi, doc/invoke.texi, doc/objc.texi, doc/rtl.texi, + doc/tm.texi: Use two spaces after ends of sentences. + + 2001-06-26 Daniel Berlin + + * toplev.c (display_help): Fix param thinko. + * Makefile.in: Fix params.h dependencies. + + 2001-06-26 Rainer Orth + + * config/i386/sol2.h (CPP_SPEC): Pass -P for .S files. + + 2001-06-26 Rainer Orth + + * config/mips/iris5.h (UNALIGNED_INT_ASM_OP, + UNALIGNED_SHORT_ASM_OP): Define. + * config/mips/iris6.h (UNALIGNED_INT_ASM_OP, + UNALIGNED_SHORT_ASM_OP): Undef. + + 2001-06-26 Aldy Hernandez + + * config/sh/sh.md (interrupt_function): Use + current_function_interrupt. + (define_delay): Schedule in delay slot if TARGET_SH3, even if it is + an interrupt function. + + * config/sh/sh.h (current_function_interrupt): Define extern. + + * config/sh/sh.c (current_function_interrupt): New global. + (sh_expand_prologue): Set current_function_interrupt. + + 2001-06-25 Neil Booth + + * cppmacro.c (make_string_token): Null terminate. + * doc/cpp.texi: Update. + * doc/cpp.1: Regenerate. + + 2001-06-25 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, + doc/gcc.texi, doc/gcov.texi, doc/install.texi, doc/invoke.texi, + doc/md.texi, doc/rtl.texi, doc/tm.texi: Be more consistent about + the use of "GCC" and related terms. + * doc/gcc.1, doc/gcov.1: Regenerate. + + 2001-06-24 Joseph S. Myers + + * doc/extend.texi, doc/gcc.texi, doc/install-old.texi, + doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Remove + uses of @refill. + + 2001-06-24 Joseph S. Myers + + * doc/install-old.texi: Remove more documentation of configure + options. + * doc/install.texi: Add it here. + + 2001-06-23 Joseph S. Myers + + * doc/install.texi: Merge from mainline: + 2001-06-21 Phil Edwards + * doc/install.texi: Add 'c' to list of --enable-languages choices. + 2001-06-21 Stan Shebs + * doc/install.texi: Use the correct name "Objective-C" everywhere + instead of "Objective C". + 2001-06-15 Loren J. Rittle + * doc/install.texi: Use correct markup hints. + 2001-06-15 Loren J. Rittle + * doc/install.texi: Update --enable-threads to match reality. + + 2001-06-22 Joseph S. Myers + + * doc/gcc.texi: Update documentation of source files of C + compiler. + + 2001-06-22 Toshiyasu Morita (toshiyasu.morita@hsa.hitachi.com) + + * predict.c: (expected_value_to_br_prob): Check for const_true_rtx + instead of const1_rtx for true case. + + 2001-06-22 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, + doc/gcc.texi, doc/install-old.texi, doc/install.texi, + doc/invoke.texi, doc/rtl.texi: Consistently use "front end" and + "back end" as nouns and "front-end" and "back-end" as adjectives. + + 2001-06-22 Toshiyasu Morita + + * config/v850/v850.c (v850_mark_machine_status): Don't mark the + p->machine->ra_rtx for GC if p->machine has already been + freed. + + 2001-06-22 Joseph S. Myers + + * c-common.c (verify_tree): Check for x being NULL. + * doc/c-tree.texi: Document COMPOUND_BODY of an empty + COMPOUND_STMT. + Fixes PR c/3259. + + 2001-06-21 Geoff Keating + + * config/rs6000/rs6000.md (maxsf3): Use rs6000_emit_minmax. + (maxsf3+1): Delete. + (minsf3): Use rs6000_emit_minmax. + (minsf3+1): Generalize to handle both SMIN and SMAX. Use + rs6000_emit_minmax. + (movsfcc): Use rs6000_emit_cmove. + (fselsfsf4): Don't compare a CONST_INT with a floating-point value. + Don't generate emit_fselsfsf4. + (fseldfsf4): Likewise. + (maxdf3): Use rs6000_emit_minmax. + (maxdf3+1): Delete. + (mindf3): Use rs6000_emit_minmax. + (mindf3+1): Generalize to handle both SMIN and SMAX. Use + rs6000_emit_minmax. + (movdfcc): Use rs6000_emit_cmove. + (fseldfdf4): Don't compare a CONST_INT with a floating-point value. + Don't generate emit_fselsfsf4. + (fselsfdf4): Likewise. + * config/rs6000/rs6000.c (zero_fp_constant): New predicate. + (min_max_operator): New predicate. + (rs6000_emit_cmove): New function. + (rs6000_emit_minmax): New function. + * config/rs6000/rs6000-protos.h: Prototype new functions. + * config/rs6000/rs6000.h (PREDICATE_CODES): Add zero_fp_constant + and min_max_operator. + + * config/rs6000/rs6000.c (output_cbranch): Handle all + conditional types in the switch statement. + 20010617 Release Manager ! * GCC 3.0 Released. 2001-06-15 Andreas Jaeger diff -Nrc3pad gcc-3.0/gcc/Makefile.in gcc-3.0.1/gcc/Makefile.in *** gcc-3.0/gcc/Makefile.in Tue Jun 12 22:05:35 2001 --- gcc-3.0.1/gcc/Makefile.in Wed Aug 8 19:26:11 2001 *************** USE_NLS = @USE_NLS@ *** 358,363 **** --- 358,366 ---- # Internationalization library. INTLLIBS = @INTLLIBS@ + # Character encoding conversion library. + LIBICONV = @LIBICONV@ + # List of internationalization subdirectories. POSUB = @POSUB@ INTL_SUBDIRS = intl $(POSUB) *************** all: all.indirect *** 590,595 **** --- 593,627 ---- # This tells GNU Make version 3 not to put all variables in the environment. .NOEXPORT: + # GCONFIG_H lists the config files that the generator files depend on, while + # CONFIG_H lists the the ones ordinary gcc files depend on, which includes + # a file generated by gencodes. + GCONFIG_H = config.h $(host_xm_file_list) + HCONFIG_H = hconfig.h $(build_xm_file_list) + CONFIG_H = $(GCONFIG_H) $(TM_H) insn-codes.h insn-flags.h + TCONFIG_H = tconfig.h $(xm_file_list) insn-codes.h insn-flags.h + TM_H = tm.h $(tm_file_list) + TM_P_H = tm_p.h $(tm_p_file_list) insn-codes.h insn-flags.h + + MACHMODE_H = machmode.h machmode.def + RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H) + RTL_H = $(RTL_BASE_H) genrtl.h + PARAMS_H = params.h params.def + TREE_H = tree.h real.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def + BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h + DEMANGLE_H = $(srcdir)/../include/demangle.h + RECOG_H = recog.h + EXPR_H = expr.h + REGS_H = regs.h varray.h $(MACHMODE_H) + INTEGRATE_H = integrate.h varray.h + LOOP_H = loop.h varray.h bitmap.h + GCC_H = gcc.h version.h + GGC_H = ggc.h varray.h + TIMEVAR_H = timevar.h timevar.def + INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h + C_COMMON_H = c-common.h $(SPLAY_TREE_H) + C_TREE_H = c-tree.h $(C_COMMON_H) + # sed inserts variable overrides after the following line. ####target overrides @target_overrides@ *************** DPBIT_FUNCS = _pack_df _unpack_df _addsu *** 826,859 **** _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \ _df_to_sf _thenan_df _df_to_usi _usi_to_df - # GCONFIG_H lists the config files that the generator files depend on, while - # CONFIG_H lists the the ones ordinary gcc files depend on, which includes - # a file generated by gencodes. - GCONFIG_H = config.h $(host_xm_file_list) - HCONFIG_H = hconfig.h $(build_xm_file_list) - CONFIG_H = $(GCONFIG_H) $(TM_H) insn-codes.h insn-flags.h - TCONFIG_H = tconfig.h $(xm_file_list) insn-codes.h insn-flags.h - TM_H = tm.h $(tm_file_list) - TM_P_H = tm_p.h $(tm_p_file_list) insn-codes.h insn-flags.h - - MACHMODE_H = machmode.h machmode.def - RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H) - RTL_H = $(RTL_BASE_H) genrtl.h - TREE_H = tree.h real.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def - BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h - DEMANGLE_H = $(srcdir)/../include/demangle.h - RECOG_H = recog.h - EXPR_H = expr.h - REGS_H = regs.h varray.h $(MACHMODE_H) - INTEGRATE_H = integrate.h varray.h - LOOP_H = loop.h varray.h bitmap.h - GCC_H = gcc.h version.h - GGC_H = ggc.h varray.h - TIMEVAR_H = timevar.h timevar.def - INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h - C_COMMON_H = c-common.h $(SPLAY_TREE_H) - C_TREE_H = c-tree.h $(C_COMMON_H) - # # Language makefile fragments. --- 858,863 ---- *************** toplev.o : toplev.c $(CONFIG_H) system.h *** 1398,1404 **** insn-config.h intl.h $(RECOG_H) Makefile toplev.h dwarfout.h \ dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \ graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \ ! ssa.h params.h $(TM_P_H) dwarf2asm.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(MAYBE_USE_COLLECT2) \ -DTARGET_NAME=\"$(target_alias)\" \ -c $(srcdir)/toplev.c --- 1402,1408 ---- insn-config.h intl.h $(RECOG_H) Makefile toplev.h dwarfout.h \ dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \ graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \ ! ssa.h $(PARAMS_H) $(TM_P_H) dwarf2asm.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(MAYBE_USE_COLLECT2) \ -DTARGET_NAME=\"$(target_alias)\" \ -c $(srcdir)/toplev.c *************** real.o : real.c $(CONFIG_H) system.h $(T *** 1470,1476 **** integrate.o : integrate.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \ intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \ ! params.h $(TM_P_H) jump.o : jump.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \ insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \ toplev.h $(INSN_ATTR_H) $(TM_P_H) --- 1474,1480 ---- integrate.o : integrate.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \ intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \ ! $(PARAMS_H) $(TM_P_H) jump.o : jump.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \ insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \ toplev.h $(INSN_ATTR_H) $(TM_P_H) *************** cse.o : cse.c $(CONFIG_H) system.h $(RTL *** 1483,1494 **** $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) gcse.o : gcse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h \ flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ ! function.h output.h toplev.h params.h $(TM_P_H) sibcall.o : sibcall.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) function.h \ hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H) resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h system.h \ $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \ ! $(INSN_ATTR_H) except.h params.h $(TM_P_H) lcm.o : lcm.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \ real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ $(TM_P_H) --- 1487,1498 ---- $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) gcse.o : gcse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h \ flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ ! function.h output.h toplev.h $(PARAMS_H) $(TM_P_H) sibcall.o : sibcall.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) function.h \ hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H) resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h system.h \ $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \ ! $(INSN_ATTR_H) except.h $(PARAMS_H) $(TM_P_H) lcm.o : lcm.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \ real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ $(TM_P_H) *************** caller-save.o : caller-save.c $(CONFIG_H *** 1542,1548 **** $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H) reorg.o : reorg.c $(CONFIG_H) system.h $(RTL_H) conditions.h hard-reg-set.h \ $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) \ ! $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h params.h $(TM_P_H) alias.o : alias.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h \ $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \ $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) --- 1546,1552 ---- $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H) reorg.o : reorg.c $(CONFIG_H) system.h $(RTL_H) conditions.h hard-reg-set.h \ $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) \ ! $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H) alias.o : alias.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h \ $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \ $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) *************** ifcvt.o : ifcvt.c $(CONFIG_H) system.h $ *** 1590,1596 **** output.h $(TM_P_H) dependence.o : dependence.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) \ $(C_COMMON_H) flags.h varray.h $(EXPR_H) ! params.o : params.c $(CONFIG_H) system.h params.h toplev.h $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) $(GGC_H) \ $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \ --- 1594,1600 ---- output.h $(TM_P_H) dependence.o : dependence.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) \ $(C_COMMON_H) flags.h varray.h $(EXPR_H) ! params.o : params.c $(CONFIG_H) system.h $(PARAMS_H) toplev.h $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) $(GGC_H) \ $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \ *************** doc: $(BUILD_INFO) gccbug *** 2277,2308 **** info: $(docdir)/cpp.info $(docdir)/gcc.info lang.info $(docdir)/cppinternals.info $(docdir)/cpp.info: $(docdir)/cpp.texi ! cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -o doc/cpp.info doc/cpp.texi ! $(docdir)/gcc.info: $(docdir)/gcc.texi $(docdir)/extend.texi $(docdir)/install.texi \ ! $(docdir)/invoke.texi $(docdir)/md.texi $(docdir)/c-tree.texi \ ! $(docdir)/rtl.texi $(docdir)/tm.texi $(docdir)/gcov.texi \ ! $(docdir)/contrib.texi $(docdir)/objc.texi $(docdir)/fdl.texi ! cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -o doc/gcc.info doc/gcc.texi $(docdir)/cppinternals.info: $(docdir)/cppinternals.texi ! cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -o doc/cppinternals.info \ doc/cppinternals.texi dvi: gcc.dvi cpp.dvi lang.dvi cppinternals.dvi # This works with GNU Make's default rule. cpp.dvi: $(docdir)/cpp.texi ! $(TEXI2DVI) -I $(docdir) $(docdir)/cpp.texi ! gcc.dvi: $(docdir)/gcc.texi $(docdir)/extend.texi $(docdir)/install.texi \ $(docdir)/invoke.texi $(docdir)/md.texi $(docdir)/c-tree.texi \ $(docdir)/rtl.texi $(docdir)/tm.texi $(docdir)/gcov.texi \ ! $(docdir)/contrib.texi $(docdir)/objc.texi $(docdir)/fdl.texi ! $(TEXI2DVI) -I $(docdir) $(docdir)/gcc.texi cppinternals.dvi: $(docdir)/cppinternals.texi ! $(TEXI2DVI) -I $(docdir) $(docdir)/cppinternals.texi generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 --- 2281,2316 ---- info: $(docdir)/cpp.info $(docdir)/gcc.info lang.info $(docdir)/cppinternals.info $(docdir)/cpp.info: $(docdir)/cpp.texi ! cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cpp.info doc/cpp.texi ! $(docdir)/gcc.info: $(docdir)/gcc.texi $(docdir)/extend.texi \ ! $(docdir)/install-old.texi $(docdir)/invoke.texi $(docdir)/md.texi \ ! $(docdir)/c-tree.texi $(docdir)/rtl.texi $(docdir)/tm.texi \ ! $(docdir)/gcov.texi $(docdir)/contrib.texi $(docdir)/objc.texi \ ! $(docdir)/include/fdl.texi $(docdir)/include/gpl.texi \ ! $(docdir)/include/funding.texi ! cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gcc.info doc/gcc.texi $(docdir)/cppinternals.info: $(docdir)/cppinternals.texi ! cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cppinternals.info \ doc/cppinternals.texi dvi: gcc.dvi cpp.dvi lang.dvi cppinternals.dvi # This works with GNU Make's default rule. cpp.dvi: $(docdir)/cpp.texi ! $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cpp.texi ! gcc.dvi: $(docdir)/gcc.texi $(docdir)/extend.texi $(docdir)/install-old.texi \ $(docdir)/invoke.texi $(docdir)/md.texi $(docdir)/c-tree.texi \ $(docdir)/rtl.texi $(docdir)/tm.texi $(docdir)/gcov.texi \ ! $(docdir)/contrib.texi $(docdir)/objc.texi \ ! $(docdir)/include/fdl.texi $(docdir)/include/gpl.texi \ ! $(docdir)/include/funding.texi ! $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gcc.texi cppinternals.dvi: $(docdir)/cppinternals.texi ! $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cppinternals.texi generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 diff -Nrc3pad gcc-3.0/gcc/NEWS gcc-3.0.1/gcc/NEWS *** gcc-3.0/gcc/NEWS Sun Jun 17 12:50:10 2001 --- gcc-3.0.1/gcc/NEWS Sun Aug 19 17:45:13 2001 *************** http://gcc.gnu.org/gcc-3.0/gcc-3.0.html *** 9,15 **** GCC 3.0 ! TBA The [1]GNU project and the GCC developers are pleased to announce the release of GCC version 3.0. --- 9,15 ---- GCC 3.0 ! June 18, 2001 The [1]GNU project and the GCC developers are pleased to announce the release of GCC version 3.0. *************** http://gcc.gnu.org/gcc-3.0/gcc-3.0.html *** 22,63 **** many other new features. See the [2]new features page for a more complete list. The GCC developers would like to thank the numerous people that have contributed new features, test results, bugfixes, etc to GCC. This ! [3]amazing group of volunteers is what makes GCC successful. And finally, we can't in good conscience fail to mention some ! [4]caveats to using GCC 3.0. ! For additional information about GCC please refer to the [5]GCC ! project web site or contact the [6]GCC development mailing list. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [7]gnu@gnu.org. There ! are also [8]other ways to contact the FSF. ! These pages are maintained by [9]The GCC team. Please send comments on these web pages and GCC to ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-05-12. References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-3.0/features.html ! 3. http://gcc.gnu.org/thanks.html ! 4. http://gcc.gnu.org/gcc-3.0/caveats.html ! 5. http://gcc.gnu.org/index.html ! 6. mailto:gcc@gcc.gnu.org ! 7. mailto:gnu@gnu.org ! 8. http://www.gnu.org/home.html#ContactInfo ! 9. http://gcc.gnu.org/about.html ! 10. mailto:gcc@gcc.gnu.org 11. mailto:gnu@gnu.org ====================================================================== http://gcc.gnu.org/gcc-3.0/features.html --- 22,73 ---- many other new features. See the [2]new features page for a more complete list. + A list of [3]successful builds is updated as new information becomes + available. + The GCC developers would like to thank the numerous people that have contributed new features, test results, bugfixes, etc to GCC. This ! [4]amazing group of volunteers is what makes GCC successful. And finally, we can't in good conscience fail to mention some ! [5]caveats to using GCC 3.0. ! For additional information about GCC please refer to the [6]GCC ! project web site or contact the [7]GCC development mailing list. ! ! To obtain GCC please use [8]our mirror sites, one of the [9]GNU mirror ! sites, or [10]our CVS server. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. ! There are also [12]other ways to contact the FSF. ! These pages are maintained by [13]The GCC team. Please send comments on these web pages and GCC to ! [14]gcc@gcc.gnu.org, send other questions to [15]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-3.0/features.html ! 3. http://gcc.gnu.org/gcc-3.0/buildstat.html ! 4. http://gcc.gnu.org/thanks.html ! 5. http://gcc.gnu.org/gcc-3.0/caveats.html ! 6. http://gcc.gnu.org/index.html ! 7. mailto:gcc@gcc.gnu.org ! 8. http://gcc.gnu.org/mirrors.html ! 9. http://www.gnu.org/order/ftp.html ! 10. http://gcc.gnu.org/cvs.html 11. mailto:gnu@gnu.org + 12. http://www.gnu.org/home.html#ContactInfo + 13. http://gcc.gnu.org/about.html + 14. mailto:gcc@gcc.gnu.org + 15. mailto:gnu@gnu.org ====================================================================== http://gcc.gnu.org/gcc-3.0/features.html *************** http://gcc.gnu.org/gcc-3.0/features.html *** 88,104 **** Java bytecodes to either native code or Java class files, and supports native methods written in either the standard JNI or the more efficient and convenient CNI. + New C++ ABI. On the IA-64 platform GCC is capable of inter-operating with other IA-64 compilers. + The new ABI also significantly reduces the size of symbol and debug information. ! + New [5]C++ support library and many C++ bug fixes, vastly improving our conformance to the ISO C++ standard. ! + New [6]inliner for C++. + Rewritten C preprocessor, integrated into the C, C++ and Objective C compilers, with very many improvements including ! ISO C99 support and [7]improvements to dependency generation. ! + Support for more [8]ISO C99 features. + Many improvements to support for checking calls to format functions such as printf and scanf, including support for ISO C99 format features, extensions from the Single Unix --- 98,116 ---- Java bytecodes to either native code or Java class files, and supports native methods written in either the standard JNI or the more efficient and convenient CNI. + + Here is a [5]partial list of C++ improvements, both new + features and those no longer supported. + New C++ ABI. On the IA-64 platform GCC is capable of inter-operating with other IA-64 compilers. + The new ABI also significantly reduces the size of symbol and debug information. ! + New [6]C++ support library and many C++ bug fixes, vastly improving our conformance to the ISO C++ standard. ! + New [7]inliner for C++. + Rewritten C preprocessor, integrated into the C, C++ and Objective C compilers, with very many improvements including ! ISO C99 support and [8]improvements to dependency generation. ! + Support for more [9]ISO C99 features. + Many improvements to support for checking calls to format functions such as printf and scanf, including support for ISO C99 format features, extensions from the Single Unix *************** http://gcc.gnu.org/gcc-3.0/features.html *** 111,117 **** included in -Wall. + Additional warning option -Wfloat-equal. + Improvements to -Wtraditional. ! + Fortran improvements are listed in [9]the Fortran documentation. * New Targets and Target Specific Improvements: + New x86 back-end, generating much improved code. --- 123,129 ---- included in -Wall. + Additional warning option -Wfloat-equal. + Improvements to -Wtraditional. ! + Fortran improvements are listed in [10]the Fortran documentation. * New Targets and Target Specific Improvements: + New x86 back-end, generating much improved code. *************** http://gcc.gnu.org/gcc-3.0/features.html *** 159,165 **** GNATS bug tracking number has been received, should be submitted again to the bug tracking database using gccbug if you can reproduce the problem with GCC 3.0.) ! + The internal libgcc library is [10]built as a shared library on systems that support it. + Extensive testsuite included with GCC, with many new tests. In addition to tests for GCC bugs that have been fixed, many --- 171,177 ---- GNATS bug tracking number has been received, should be submitted again to the bug tracking database using gccbug if you can reproduce the problem with GCC 3.0.) ! + The internal libgcc library is [11]built as a shared library on systems that support it. + Extensive testsuite included with GCC, with many new tests. In addition to tests for GCC bugs that have been fixed, many *************** http://gcc.gnu.org/gcc-3.0/features.html *** 169,189 **** -Wpadded, -Wunreachable-code and -Wdisabled-optimization. + Target-independent options -falign-functions, -falign-loops and -falign-jumps. ! * Plus a great many bugfixes and almost all the [11]features found in GCC 2.95. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [12]gnu@gnu.org. ! There are also [13]other ways to contact the FSF. ! These pages are maintained by [14]The GCC team. Please send comments on these web pages and GCC to ! [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-06-13. References --- 181,201 ---- -Wpadded, -Wunreachable-code and -Wdisabled-optimization. + Target-independent options -falign-functions, -falign-loops and -falign-jumps. ! * Plus a great many bugfixes and almost all the [12]features found in GCC 2.95. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [13]gnu@gnu.org. ! There are also [14]other ways to contact the FSF. ! These pages are maintained by [15]The GCC team. Please send comments on these web pages and GCC to ! [16]gcc@gcc.gnu.org, send other questions to [17]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References *************** References *** 191,208 **** 2. http://gcc.gnu.org/news/ssa.html 3. http://gcc.gnu.org/news/null.html 4. http://gcc.gnu.org/news/unify.html ! 5. http://gcc.gnu.org/libstdc++/ ! 6. http://gcc.gnu.org/news/inlining.html ! 7. http://gcc.gnu.org/news/dependencies.html ! 8. http://gcc.gnu.org/gcc-3.0/c99status.html ! 9. http://gcc.gnu.org/onlinedocs/g77_news.html ! 10. http://gcc.gnu.org/gcc-3.0/libgcc.html ! 11. http://gcc.gnu.org/gcc-2.95/features.html ! 12. mailto:gnu@gnu.org ! 13. http://www.gnu.org/home.html#ContactInfo ! 14. http://gcc.gnu.org/about.html ! 15. mailto:gcc@gcc.gnu.org ! 16. mailto:gnu@gnu.org ====================================================================== http://gcc.gnu.org/gcc-3.0/caveats.html --- 203,221 ---- 2. http://gcc.gnu.org/news/ssa.html 3. http://gcc.gnu.org/news/null.html 4. http://gcc.gnu.org/news/unify.html ! 5. http://gcc.gnu.org/gcc-3.0/c++features.html ! 6. http://gcc.gnu.org/libstdc++/ ! 7. http://gcc.gnu.org/news/inlining.html ! 8. http://gcc.gnu.org/news/dependencies.html ! 9. http://gcc.gnu.org/gcc-3.0/c99status.html ! 10. http://gcc.gnu.org/onlinedocs/g77_news.html ! 11. http://gcc.gnu.org/gcc-3.0/libgcc.html ! 12. http://gcc.gnu.org/gcc-2.95/features.html ! 13. mailto:gnu@gnu.org ! 14. http://www.gnu.org/home.html#ContactInfo ! 15. http://gcc.gnu.org/about.html ! 16. mailto:gcc@gcc.gnu.org ! 17. mailto:gnu@gnu.org ====================================================================== http://gcc.gnu.org/gcc-3.0/caveats.html *************** http://gcc.gnu.org/gcc-3.0/caveats.html *** 228,257 **** * Certain non-standard iostream methods from earlier versions of libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach, ostream::form, and istream::gets. Here are workaround hints for: ! [1]ostream::form, [2]filebuf::at tach. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [3]gnu@gnu.org. There ! are also [4]other ways to contact the FSF. ! These pages are maintained by [5]The GCC team. Please send comments on these web pages and GCC to ! [6]gcc@gcc.gnu.org, send other questions to [7]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-06-13. References 1. http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html 2. http://gcc.gnu.org/onlinedocs/libstdc++/ext/howto.html ! 3. mailto:gnu@gnu.org ! 4. http://www.gnu.org/home.html#ContactInfo ! 5. http://gcc.gnu.org/about.html ! 6. mailto:gcc@gcc.gnu.org ! 7. mailto:gnu@gnu.org ====================================================================== http://gcc.gnu.org/gcc-2.95/gcc-2.95.3.html --- 241,277 ---- * Certain non-standard iostream methods from earlier versions of libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach, ostream::form, and istream::gets. Here are workaround hints for: ! [1]ostream::form, [2]filebuf::attach. ! * The new C++ ABI is not yet fully supported by current (as of ! 2001-07-01) releases and development versions of GDB, or any ! earlier versions. There is a problem setting breakpoints by line ! number, and other related issues that have been fixed in GCC 3.0 ! but not yet handled in GDB: ! [3]http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [4]gnu@gnu.org. There ! are also [5]other ways to contact the FSF. ! These pages are maintained by [6]The GCC team. Please send comments on these web pages and GCC to ! [7]gcc@gcc.gnu.org, send other questions to [8]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References 1. http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html 2. http://gcc.gnu.org/onlinedocs/libstdc++/ext/howto.html ! 3. http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html ! 4. mailto:gnu@gnu.org ! 5. http://www.gnu.org/home.html#ContactInfo ! 6. http://gcc.gnu.org/about.html ! 7. mailto:gcc@gcc.gnu.org ! 8. mailto:gnu@gnu.org ====================================================================== http://gcc.gnu.org/gcc-2.95/gcc-2.95.3.html *************** http://gcc.gnu.org/gcc-2.95/gcc-2.95.3.h *** 333,339 **** Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-06-07. References --- 353,359 ---- Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References *************** http://gcc.gnu.org/gcc-2.95/gcc-2.95.2.h *** 493,499 **** Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-05-04. References --- 513,519 ---- Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References *************** http://gcc.gnu.org/gcc-2.95/gcc-2.95.1.h *** 627,633 **** Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-05-04. References --- 647,653 ---- Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References *************** http://gcc.gnu.org/gcc-2.95/gcc-2.95.htm *** 706,712 **** Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-05-04. References --- 726,732 ---- Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References *************** http://gcc.gnu.org/gcc-2.95/features.htm *** 807,813 **** Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-05-04. References --- 827,833 ---- Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References *************** http://gcc.gnu.org/gcc-2.95/caveats.html *** 889,895 **** Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-05-04. References --- 909,915 ---- Suite 330, Boston, MA 02111, USA. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2001-08-19. References diff -Nrc3pad gcc-3.0/gcc/aclocal.m4 gcc-3.0.1/gcc/aclocal.m4 *** gcc-3.0/gcc/aclocal.m4 Fri May 25 22:43:41 2001 --- gcc-3.0.1/gcc/aclocal.m4 Wed Jul 18 09:59:15 2001 *************** else *** 1152,1154 **** --- 1152,1224 ---- gcc_cv_prog_$2_modern=no fi ]) + + #serial AM2 + + dnl From Bruno Haible. + + AC_DEFUN([AM_ICONV], + [ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + AC_ARG_WITH([libiconv-prefix], + [ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [ + for dir in `echo "$withval" | tr : ' '`; do + if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi + if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi + done + ]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include + #include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS -liconv" + AC_TRY_LINK([#include + #include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ + #include + #include + extern + #ifdef __cplusplus + "C" + #endif + #if defined(__STDC__) || defined(__cplusplus) + size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); + #else + size_t iconv(); + #endif + ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi + LIBICONV= + if test "$am_cv_lib_iconv" = yes; then + LIBICONV="-liconv" + fi + AC_SUBST(LIBICONV) + ]) diff -Nrc3pad gcc-3.0/gcc/builtins.c gcc-3.0.1/gcc/builtins.c *** gcc-3.0/gcc/builtins.c Tue May 22 13:04:09 2001 --- gcc-3.0.1/gcc/builtins.c Fri Aug 3 17:24:13 2001 *************** expand_builtin_longjmp (buf_addr, value) *** 698,704 **** /* We have to pass a value to the nonlocal_goto pattern that will get copied into the static_chain pointer, but it does not matter what that value is, because builtin_setjmp does not use it. */ ! emit_insn (gen_nonlocal_goto (value, fp, stack, lab)); else #endif { --- 698,704 ---- /* We have to pass a value to the nonlocal_goto pattern that will get copied into the static_chain pointer, but it does not matter what that value is, because builtin_setjmp does not use it. */ ! emit_insn (gen_nonlocal_goto (value, lab, stack, fp)); else #endif { *************** fold_builtin_constant_p (arglist) *** 3665,3674 **** has side effects, show we don't know it to be a constant. Likewise if it's a pointer or aggregate type since in those case we only want literals, since those are only optimized ! when generating RTL, not later. */ if (TREE_SIDE_EFFECTS (arglist) || cse_not_expected || AGGREGATE_TYPE_P (TREE_TYPE (arglist)) ! || POINTER_TYPE_P (TREE_TYPE (arglist))) return integer_zero_node; return 0; --- 3665,3678 ---- has side effects, show we don't know it to be a constant. Likewise if it's a pointer or aggregate type since in those case we only want literals, since those are only optimized ! when generating RTL, not later. ! And finally, if we are compiling an initializer, not code, we ! need to return a definite result now; there's not going to be any ! more optimization done. */ if (TREE_SIDE_EFFECTS (arglist) || cse_not_expected || AGGREGATE_TYPE_P (TREE_TYPE (arglist)) ! || POINTER_TYPE_P (TREE_TYPE (arglist)) ! || cfun == 0) return integer_zero_node; return 0; diff -Nrc3pad gcc-3.0/gcc/c-common.c gcc-3.0.1/gcc/c-common.c *** gcc-3.0/gcc/c-common.c Tue Jun 5 00:46:56 2001 --- gcc-3.0.1/gcc/c-common.c Fri Jun 22 12:23:23 2001 *************** verify_tree (x, pbefore_sp, pno_sp, writ *** 1443,1448 **** --- 1443,1453 ---- enum tree_code code; char class; + /* X may be NULL if it is the operand of an empty statement expression + ({ }). */ + if (x == NULL) + return; + restart: code = TREE_CODE (x); class = TREE_CODE_CLASS (code); diff -Nrc3pad gcc-3.0/gcc/c-parse.c gcc-3.0.1/gcc/c-parse.c *** gcc-3.0/gcc/c-parse.c Sun Jun 17 12:51:11 2001 --- gcc-3.0.1/gcc/c-parse.c Sun Aug 19 17:53:44 2001 *************** *** 1,6 **** /* A Bison parser, made from c-parse.y ! by GNU Bison version 1.28 */ #define YYBISON 1 /* Identify Bison output. */ --- 1,7 ---- /* A Bison parser, made from c-parse.y ! by GNU Bison version 1.27 ! */ #define YYBISON 1 /* Identify Bison output. */ *************** static const short yycheck[] = { 38, *** 1314,1320 **** }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/lib/bison.simple" ! /* This file comes from bison-1.28. */ /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. --- 1315,1321 ---- }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/lib/bison.simple" ! /* This file comes from bison-1.27. */ /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. *************** __yy_memcpy (char *to, char *from, unsig *** 1527,1533 **** #endif #endif ! #line 217 "/usr/lib/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. --- 1528,1534 ---- #endif #endif ! #line 216 "/usr/lib/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. *************** case 425: *** 3729,3735 **** break;} } /* the action file gets copied in in place of this dollarsign */ ! #line 543 "/usr/lib/bison.simple" yyvsp -= yylen; yyssp -= yylen; --- 3730,3736 ---- break;} } /* the action file gets copied in in place of this dollarsign */ ! #line 542 "/usr/lib/bison.simple" yyvsp -= yylen; yyssp -= yylen; diff -Nrc3pad gcc-3.0/gcc/c-pragma.h gcc-3.0.1/gcc/c-pragma.h *** gcc-3.0/gcc/c-pragma.h Sat Nov 25 11:28:42 2000 --- gcc-3.0.1/gcc/c-pragma.h Tue Jul 17 05:51:29 2001 *************** *** 1,5 **** /* Pragma related interfaces. ! Copyright (C) 1995, 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Pragma related interfaces. ! Copyright (C) 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 22,30 **** #define _C_PRAGMA_H #ifdef HANDLE_SYSV_PRAGMA ! /* Support #pragma weak iff ASM_WEAKEN_LABEL and ASM_OUTPUT_DEF are defined. */ ! #if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF) #define HANDLE_PRAGMA_WEAK SUPPORTS_WEAK #endif --- 22,30 ---- #define _C_PRAGMA_H #ifdef HANDLE_SYSV_PRAGMA ! /* Support #pragma weak iff ASM_WEAKEN_LABEL and ASM_OUTPUT_WEAK_ALIAS are defined. */ ! #if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_WEAK_ALIAS) #define HANDLE_PRAGMA_WEAK SUPPORTS_WEAK #endif diff -Nrc3pad gcc-3.0/gcc/calls.c gcc-3.0.1/gcc/calls.c *** gcc-3.0/gcc/calls.c Sat Jun 9 12:22:25 2001 --- gcc-3.0.1/gcc/calls.c Tue Jul 10 18:06:33 2001 *************** expand_call (exp, target, ignore) *** 3445,3451 **** /* Output a library call to function FUN (a SYMBOL_REF rtx). The RETVAL parameter specifies whether return value needs to be saved, other ! parameters are documented in the emit_library_call function bellow. */ static rtx emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) int retval; --- 3445,3451 ---- /* Output a library call to function FUN (a SYMBOL_REF rtx). The RETVAL parameter specifies whether return value needs to be saved, other ! parameters are documented in the emit_library_call function below. */ static rtx emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) int retval; diff -Nrc3pad gcc-3.0/gcc/combine.c gcc-3.0.1/gcc/combine.c *** gcc-3.0/gcc/combine.c Sat Jun 9 12:22:25 2001 --- gcc-3.0.1/gcc/combine.c Fri Jul 13 09:39:35 2001 *************** try_combine (i3, i2, i1, new_direct_jump *** 2238,2243 **** --- 2238,2244 ---- appeared to be a memory address. This is a kludge. */ if (split_code == MULT && GET_CODE (XEXP (*split, 1)) == CONST_INT + && INTVAL (XEXP (*split, 1)) > 0 && (i = exact_log2 (INTVAL (XEXP (*split, 1)))) >= 0) { SUBST (*split, gen_rtx_combine (ASHIFT, split_mode, diff -Nrc3pad gcc-3.0/gcc/config/alpha/alpha.c gcc-3.0.1/gcc/config/alpha/alpha.c *** gcc-3.0/gcc/config/alpha/alpha.c Mon Jun 11 09:25:36 2001 --- gcc-3.0.1/gcc/config/alpha/alpha.c Sun Jul 15 09:01:46 2001 *************** alpha_emit_xfloating_compare (code, op0, *** 2336,2345 **** operands[1] = op1; out = gen_reg_rtx (DImode); ! /* ??? Strange equiv cause what's actually returned is -1,0,1, not a ! proper boolean value. */ ! alpha_emit_xfloating_libcall (func, out, operands, 2, ! gen_rtx_COMPARE (TFmode, op0, op1)); return out; } --- 2336,2345 ---- operands[1] = op1; out = gen_reg_rtx (DImode); ! /* ??? Strange mode for equiv because what's actually returned ! is -1,0,1, not a proper boolean value. */ ! alpha_emit_xfloating_libcall (func, out, operands, 2, ! gen_rtx_fmt_ee (code, CCmode, op0, op1)); return out; } diff -Nrc3pad gcc-3.0/gcc/config/alpha/osf.h gcc-3.0.1/gcc/config/alpha/osf.h *** gcc-3.0/gcc/config/alpha/osf.h Mon Jun 11 09:15:19 2001 --- gcc-3.0.1/gcc/config/alpha/osf.h Sun Aug 12 13:22:19 2001 *************** __enable_execute_stack (addr) \ *** 183,185 **** --- 183,208 ---- (TARGET_GAS \ ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \ : DW_EH_PE_aligned) + + /* This is how we tell the assembler that a symbol is weak. */ + + #define ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, VALUE) \ + do \ + { \ + ASM_GLOBALIZE_LABEL (FILE, NAME); \ + fputs ("\t.weakext\t", FILE); \ + assemble_name (FILE, NAME); \ + if (VALUE) \ + { \ + fputc (' ', FILE); \ + assemble_name (FILE, VALUE); \ + } \ + fputc ('\n', FILE); \ + } \ + while (0) + + #define ASM_WEAKEN_LABEL(FILE, NAME) ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, 0) + + /* Handle #pragma weak and #pragma pack. */ + #undef HANDLE_SYSV_PRAGMA + #define HANDLE_SYSV_PRAGMA 1 diff -Nrc3pad gcc-3.0/gcc/config/arm/rtems-elf.h gcc-3.0.1/gcc/config/arm/rtems-elf.h *** gcc-3.0/gcc/config/arm/rtems-elf.h Wed Dec 6 18:42:01 2000 --- gcc-3.0.1/gcc/config/arm/rtems-elf.h Thu Aug 16 17:21:00 2001 *************** Boston, MA 02111-1307, USA. */ *** 26,32 **** #include "unknown-elf.h" #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Darm -Darm_elf -Drtems -D__rtems__ -D__ELF__ \ -Asystem(rtems) -Acpu(arm) -Amachine(arm)" /*#undef INVOKE_main*/ --- 26,32 ---- #include "unknown-elf.h" #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Drtems -D__rtems__ -D__ELF__ \ -Asystem(rtems) -Acpu(arm) -Amachine(arm)" /*#undef INVOKE_main*/ diff -Nrc3pad gcc-3.0/gcc/config/avr/avr.c gcc-3.0.1/gcc/config/avr/avr.c *** gcc-3.0/gcc/config/avr/avr.c Sat May 12 13:32:41 2001 --- gcc-3.0.1/gcc/config/avr/avr.c Wed Jun 27 14:35:37 2001 *************** legitimate_address_p (mode, x, strict) *** 802,808 **** rtx x; int strict; { ! int r = 0; if (TARGET_ALL_DEBUG) { fprintf (stderr, "mode: (%s) %s %s %s %s:", --- 802,809 ---- rtx x; int strict; { ! enum reg_class r = NO_REGS; ! if (TARGET_ALL_DEBUG) { fprintf (stderr, "mode: (%s) %s %s %s %s:", *************** legitimate_address_p (mode, x, strict) *** 824,832 **** } if (REG_P (x) && (strict ? REG_OK_FOR_BASE_STRICT_P (x) : REG_OK_FOR_BASE_NOSTRICT_P (x))) ! r = 'R'; else if (CONSTANT_ADDRESS_P (x)) ! r = 'S'; else if (GET_CODE (x) == PLUS && REG_P (XEXP (x, 0)) && GET_CODE (XEXP (x, 1)) == CONST_INT --- 825,833 ---- } if (REG_P (x) && (strict ? REG_OK_FOR_BASE_STRICT_P (x) : REG_OK_FOR_BASE_NOSTRICT_P (x))) ! r = POINTER_REGS; else if (CONSTANT_ADDRESS_P (x)) ! r = ALL_REGS; else if (GET_CODE (x) == PLUS && REG_P (XEXP (x, 0)) && GET_CODE (XEXP (x, 1)) == CONST_INT *************** legitimate_address_p (mode, x, strict) *** 838,863 **** if (! strict || REGNO (XEXP (x,0)) == REG_Y || REGNO (XEXP (x,0)) == REG_Z) ! r = 'Q'; if (XEXP (x,0) == frame_pointer_rtx || XEXP (x,0) == arg_pointer_rtx) ! r = 'Q'; } else if (frame_pointer_needed && XEXP (x,0) == frame_pointer_rtx) ! r = 'U'; } else if ((GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC) && REG_P (XEXP (x, 0)) && (strict ? REG_OK_FOR_BASE_STRICT_P (XEXP (x, 0)) : REG_OK_FOR_BASE_NOSTRICT_P (XEXP (x, 0)))) { ! r = 'T'; } if (TARGET_ALL_DEBUG) { fprintf (stderr, " ret = %c\n", r); } ! return r; } /* Attempts to replace X with a valid --- 839,864 ---- if (! strict || REGNO (XEXP (x,0)) == REG_Y || REGNO (XEXP (x,0)) == REG_Z) ! r = BASE_POINTER_REGS; if (XEXP (x,0) == frame_pointer_rtx || XEXP (x,0) == arg_pointer_rtx) ! r = BASE_POINTER_REGS; } else if (frame_pointer_needed && XEXP (x,0) == frame_pointer_rtx) ! r = POINTER_Y_REGS; } else if ((GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC) && REG_P (XEXP (x, 0)) && (strict ? REG_OK_FOR_BASE_STRICT_P (XEXP (x, 0)) : REG_OK_FOR_BASE_NOSTRICT_P (XEXP (x, 0)))) { ! r = POINTER_REGS; } if (TARGET_ALL_DEBUG) { fprintf (stderr, " ret = %c\n", r); } ! return r == NO_REGS ? 0 : (int)r; } /* Attempts to replace X with a valid diff -Nrc3pad gcc-3.0/gcc/config/avr/avr.md gcc-3.0.1/gcc/config/avr/avr.md *** gcc-3.0/gcc/config/avr/avr.md Sat Jan 20 23:08:46 2001 --- gcc-3.0.1/gcc/config/avr/avr.md Wed Jun 27 14:35:37 2001 *************** *** 475,485 **** (set_attr "cc" "clobber,clobber")]) (define_expand "strlenhi" ! [(parallel ! [(set (match_dup 4) ! (unspec:HI [(match_operand:BLK 1 "memory_operand" "") ! (match_operand:QI 2 "const_int_operand" "") ! (match_operand:HI 3 "immediate_operand" "")] 0))]) (set (match_dup 4) (plus:HI (match_dup 4) (const_int -1))) (set (match_operand:HI 0 "register_operand" "") --- 475,484 ---- (set_attr "cc" "clobber,clobber")]) (define_expand "strlenhi" ! [(set (match_dup 4) ! (unspec:HI [(match_operand:BLK 1 "memory_operand" "") ! (match_operand:QI 2 "const_int_operand" "") ! (match_operand:HI 3 "immediate_operand" "")] 0)) (set (match_dup 4) (plus:HI (match_dup 4) (const_int -1))) (set (match_operand:HI 0 "register_operand" "") diff -Nrc3pad gcc-3.0/gcc/config/h8300/h8300.c gcc-3.0.1/gcc/config/h8300/h8300.c *** gcc-3.0/gcc/config/h8300/h8300.c Sat May 12 13:32:43 2001 --- gcc-3.0.1/gcc/config/h8300/h8300.c Wed Jul 4 14:56:14 2001 *************** get_shift_alg (shift_type, shift_mode, c *** 2238,2244 **** { if (count == 15 && shift_type == SHIFT_ASHIFTRT) { ! info->special = "shll\t%t0,%t0\n\tsubx\t%t0,%t0\n\tmov.b\t%t0,%s0"; info->cc_valid_p = 0; return SHIFT_SPECIAL; } --- 2238,2244 ---- { if (count == 15 && shift_type == SHIFT_ASHIFTRT) { ! info->special = "shll\t%t0\n\tsubx\t%t0,%t0\n\tmov.b\t%t0,%s0"; info->cc_valid_p = 0; return SHIFT_SPECIAL; } diff -Nrc3pad gcc-3.0/gcc/config/h8300/t-h8300 gcc-3.0.1/gcc/config/h8300/t-h8300 *** gcc-3.0/gcc/config/h8300/t-h8300 Wed Aug 4 20:27:47 1999 --- gcc-3.0.1/gcc/config/h8300/t-h8300 Mon Jul 9 15:03:17 2001 *************** *** 1,6 **** CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = h8300/lib1funcs.asm ! LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 # We do not have DF or DI types, so fake out the libgcc2 compilation. TARGET_LIBGCC2_CFLAGS = -DDF=SF -DDI=SI --- 1,7 ---- CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = h8300/lib1funcs.asm ! LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \ ! _floatdisf _fixsfdi # We do not have DF or DI types, so fake out the libgcc2 compilation. TARGET_LIBGCC2_CFLAGS = -DDF=SF -DDI=SI diff -Nrc3pad gcc-3.0/gcc/config/i386/freebsd-aout.h gcc-3.0.1/gcc/config/i386/freebsd-aout.h *** gcc-3.0/gcc/config/i386/freebsd-aout.h Sun May 20 12:49:17 2001 --- gcc-3.0.1/gcc/config/i386/freebsd-aout.h Sun Jul 22 13:50:46 2001 *************** Boston, MA 02111-1307, USA. */ *** 34,39 **** --- 34,46 ---- #define TARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) + /* The macro defined in i386.h doesn't work with the old gas of + FreeBSD 2.x. The definition in sco.h and sol2.h appears to work, + but it turns out that, even though the assembler doesn't complain, + we get incorrect results. Fortunately, the definition in + defaults.h works. */ + #undef ASM_PREFERRED_EH_DATA_FORMAT + #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -D__FreeBSD__\ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" diff -Nrc3pad gcc-3.0/gcc/config/i386/i386.c gcc-3.0.1/gcc/config/i386/i386.c *** gcc-3.0/gcc/config/i386/i386.c Tue Jun 12 16:17:43 2001 --- gcc-3.0.1/gcc/config/i386/i386.c Mon Aug 6 14:26:24 2001 *************** const int x86_cmove = m_PPRO | m_ATHLON; *** 195,201 **** const int x86_deep_branch = m_PPRO | m_K6 | m_ATHLON; const int x86_use_sahf = m_PPRO | m_K6; const int x86_partial_reg_stall = m_PPRO; ! const int x86_use_loop = m_K6; const int x86_use_fiop = ~(m_PPRO | m_ATHLON | m_PENT); const int x86_use_mov0 = m_K6; const int x86_use_cltd = ~(m_PENT | m_K6); --- 195,202 ---- const int x86_deep_branch = m_PPRO | m_K6 | m_ATHLON; const int x86_use_sahf = m_PPRO | m_K6; const int x86_partial_reg_stall = m_PPRO; ! const int x86_use_loop = 0; /* Should be set to K6 and i386, but is broken ! and temporarily disabled for 3.0.x. */ const int x86_use_fiop = ~(m_PPRO | m_ATHLON | m_PENT); const int x86_use_mov0 = m_K6; const int x86_use_cltd = ~(m_PENT | m_K6); *************** ix86_expand_setcc (code, dest) *** 5537,5545 **** emit subreg setcc, zero extend. 2 -- destination is in QImode: emit setcc only. - */ ! type = 0; if (GET_MODE (dest) == QImode) type = 2; --- 5538,5549 ---- emit subreg setcc, zero extend. 2 -- destination is in QImode: emit setcc only. ! We don't use mode 0 early in compilation because it confuses CSE. ! There are peepholes to turn mode 1 into mode 0 if things work out ! nicely after reload. */ ! ! type = cse_not_expected ? 0 : 1; if (GET_MODE (dest) == QImode) type = 2; diff -Nrc3pad gcc-3.0/gcc/config/i386/i386.h gcc-3.0.1/gcc/config/i386/i386.h *** gcc-3.0/gcc/config/i386/i386.h Wed May 30 13:28:42 2001 --- gcc-3.0.1/gcc/config/i386/i386.h Mon Aug 6 14:26:25 2001 *************** extern int ix86_arch; *** 511,516 **** --- 511,523 ---- aligned; the compiler cannot rely on having this alignment. */ #define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary + /* As of July 2001, many runtimes to not align the stack properly when + entering main. This causes expand_main_function to forcably align + the stack, which results in aligned frames for functions called from + main, though it does nothing for the alignment of main itself. */ + #define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \ + (ix86_preferred_stack_boundary > STACK_BOUNDARY) + /* Allocation boundary for the code of a function. */ #define FUNCTION_BOUNDARY \ (1 << ((ix86_align_funcs >= 0 ? ix86_align_funcs : -ix86_align_funcs) + 3)) diff -Nrc3pad gcc-3.0/gcc/config/i386/i386.md gcc-3.0.1/gcc/config/i386/i386.md *** gcc-3.0/gcc/config/i386/i386.md Tue Jun 12 16:17:46 2001 --- gcc-3.0.1/gcc/config/i386/i386.md Mon Aug 6 13:33:40 2001 *************** *** 9594,9599 **** --- 9594,9618 ---- (match_dup 0) (pc)))] "") + + ;; Convert setcc + movzbl to xor + setcc if operands don't overlap. + + (define_peephole2 + [(set (reg 17) (match_operand 0 "" "")) + (set (match_operand:QI 1 "register_operand" "") + (match_operator:QI 2 "ix86_comparison_operator" + [(reg 17) (const_int 0)])) + (set (match_operand 3 "q_regs_operand" "") + (zero_extend (match_dup 1)))] + "peep2_reg_dead_p (3, operands[1]) + && ! reg_overlap_mentioned_p (operands[3], operands[0])" + [(parallel [(set (match_dup 3) (const_int 0)) + (clobber (reg:CC 17))]) + (set (match_dup 4) (match_dup 0)) + (set (strict_low_part (match_dup 5)) + (match_dup 2))] + "operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17); + operands[5] = gen_rtx_REG (QImode, REGNO (operands[3]));") ;; Call instructions. *************** *** 12577,12582 **** --- 12596,12620 ---- (const_int 128))) (clobber (match_dup 0))])] "") + + ;; Convert setcc + movzbl to xor + setcc if operands don't overlap. + + (define_peephole2 + [(set (reg 17) (match_operand 0 "" "")) + (set (match_operand:QI 1 "register_operand" "") + (match_operator:QI 2 "ix86_comparison_operator" + [(reg 17) (const_int 0)])) + (set (match_operand 3 "q_regs_operand" "") + (zero_extend (match_dup 1)))] + "peep2_reg_dead_p (3, operands[1]) + && ! reg_overlap_mentioned_p (operands[3], operands[0])" + [(parallel [(set (match_dup 3) (const_int 0)) + (clobber (reg:CC 17))]) + (set (match_dup 4) (match_dup 0)) + (set (strict_low_part (match_dup 5)) + (match_dup 2))] + "operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17); + operands[5] = gen_rtx_REG (QImode, REGNO (operands[3]));") ;; Call-value patterns last so that the wildcard operand does not ;; disrupt insn-recog's switch tables. diff -Nrc3pad gcc-3.0/gcc/config/i386/openbsd.h gcc-3.0.1/gcc/config/i386/openbsd.h *** gcc-3.0/gcc/config/i386/openbsd.h Sun May 20 12:49:17 2001 --- gcc-3.0.1/gcc/config/i386/openbsd.h Fri Jul 13 11:01:42 2001 *************** Boston, MA 02111-1307, USA. */ *** 114,119 **** --- 114,121 ---- configuration files... */ #define DWARF2_UNWIND_INFO 0 + #undef ASM_PREFERRED_EH_DATA_FORMAT + /* Assembler format: alignment output. */ /* A C statement to output to the stdio stream FILE an assembler *************** Boston, MA 02111-1307, USA. */ *** 133,135 **** --- 135,141 ---- #endif /* Note that we pick up ASM_OUTPUT_MI_THUNK from unix.h. */ + + #undef ASM_COMMENT_START + #define ASM_COMMENT_START ";#" + diff -Nrc3pad gcc-3.0/gcc/config/i386/sco5.h gcc-3.0.1/gcc/config/i386/sco5.h *** gcc-3.0/gcc/config/i386/sco5.h Tue May 22 10:13:48 2001 --- gcc-3.0.1/gcc/config/i386/sco5.h Sat Jul 28 23:47:53 2001 *************** do { \ *** 536,546 **** --- 536,548 ---- #define DBX_REGISTER_NUMBER(n) \ ((TARGET_ELF) ? svr4_dbx_register_map[n] : dbx_register_map[n]) + #undef DWARF2_DEBUGGING_INFO #undef DWARF_DEBUGGING_INFO #undef SDB_DEBUGGING_INFO #undef DBX_DEBUGGING_INFO #undef PREFERRED_DEBUGGING_TYPE + #define DWARF2_DEBUGGING_INFO 1 #define DWARF_DEBUGGING_INFO 1 #define SDB_DEBUGGING_INFO 1 #define DBX_DEBUGGING_INFO 1 diff -Nrc3pad gcc-3.0/gcc/config/i386/sol2.h gcc-3.0.1/gcc/config/i386/sol2.h *** gcc-3.0/gcc/config/i386/sol2.h Thu Nov 2 15:29:10 2000 --- gcc-3.0.1/gcc/config/i386/sol2.h Tue Jul 3 05:33:09 2001 *************** *** 1,5 **** /* Target definitions for GNU compiler for Intel 80386 running Solaris 2 ! Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. Contributed by Fred Fish (fnf@cygnus.com). --- 1,5 ---- /* Target definitions for GNU compiler for Intel 80386 running Solaris 2 ! Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Fred Fish (fnf@cygnus.com). *************** Boston, MA 02111-1307, USA. */ *** 61,76 **** #define FORCE_INIT_SECTION_ALIGN asm (ALIGN_ASM_OP ## "16") #define FORCE_FINI_SECTION_ALIGN FORCE_INIT_SECTION_ALIGN /* Add "sun" to the list of symbols defined for SVR4. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES \ "-Dunix -D__svr4__ -D__SVR4 -Dsun -Asystem=svr4" #undef CPP_SPEC ! #define CPP_SPEC "%(cpp_cpu) \ ! %{pthreads:-D_REENTRANT -D_PTHREADS} \ ! %{!pthreads:%{threads:-D_REENTRANT -D_SOLARIS_THREADS}} \ ! %{compat-bsd:-iwithprefixbefore ucbinclude -I/usr/ucbinclude}" #undef LIB_SPEC #define LIB_SPEC \ --- 61,87 ---- #define FORCE_INIT_SECTION_ALIGN asm (ALIGN_ASM_OP ## "16") #define FORCE_FINI_SECTION_ALIGN FORCE_INIT_SECTION_ALIGN + /* Select a format to encode pointers in exception handling data. CODE + is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is + true if the symbol may be affected by dynamic relocations. */ + #undef ASM_PREFERRED_EH_DATA_FORMAT + #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ + (flag_pic ? (GLOBAL ? DW_EH_PE_indirect : 0) | DW_EH_PE_datarel \ + : DW_EH_PE_absptr) + /* Add "sun" to the list of symbols defined for SVR4. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES \ "-Dunix -D__svr4__ -D__SVR4 -Dsun -Asystem=svr4" + /* Solaris 2/Intel as chokes on #line directives. */ #undef CPP_SPEC ! #define CPP_SPEC \ ! "%{.S:-P} \ ! %(cpp_cpu) \ ! %{pthreads:-D_REENTRANT -D_PTHREADS} \ ! %{!pthreads:%{threads:-D_REENTRANT -D_SOLARIS_THREADS}} \ ! %{compat-bsd:-iwithprefixbefore ucbinclude -I/usr/ucbinclude}" #undef LIB_SPEC #define LIB_SPEC \ diff -Nrc3pad gcc-3.0/gcc/config/i386/t-cygwin gcc-3.0.1/gcc/config/i386/t-cygwin *** gcc-3.0/gcc/config/i386/t-cygwin Fri Feb 9 12:06:15 2001 --- gcc-3.0.1/gcc/config/i386/t-cygwin Wed Aug 8 19:26:11 2001 *************** LIBGCC2_INCLUDES = -I$(srcdir)/../winsup *** 16,20 **** -I$(srcdir)/../winsup/cygwin/include \ -I$(srcdir)/../winsup/w32api/include ! winnt.o: $(srcdir)/config/i386/winnt.c $(RTL_H) $(TREE_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/i386/winnt.c --- 16,20 ---- -I$(srcdir)/../winsup/cygwin/include \ -I$(srcdir)/../winsup/w32api/include ! winnt.o: $(srcdir)/config/i386/winnt.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/i386/winnt.c diff -Nrc3pad gcc-3.0/gcc/config/i386/t-openbsd gcc-3.0.1/gcc/config/i386/t-openbsd *** gcc-3.0/gcc/config/i386/t-openbsd Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/i386/t-openbsd Fri Jul 13 11:01:42 2001 *************** *** 0 **** --- 1,6 ---- + # gdb gets confused if pic code is linked with non pic + # We cope by building variants of libgcc. + MULTILIB_OPTIONS = fpic + MULTILIB_MATCHES=fpic=fPIC + LIBGCC = stmp-multilib + INSTALL_LIBGCC = install-multilib diff -Nrc3pad gcc-3.0/gcc/config/i960/i960.h gcc-3.0.1/gcc/config/i960/i960.h *** gcc-3.0/gcc/config/i960/i960.h Thu Nov 2 15:29:10 2000 --- gcc-3.0.1/gcc/config/i960/i960.h Tue Jul 24 18:56:47 2001 *************** Boston, MA 02111-1307, USA. */ *** 39,44 **** --- 39,45 ---- %{mmc:-D__i960MC}\ %{mca:-D__i960CA}%{mcc:-D__i960CC}\ %{mcf:-D__i960CF}}\ + %{msoft-float:-D_SOFT_FLOAT}\ %{mka:-D__i960KA__ -D__i960_KA__}\ %{mkb:-D__i960KB__ -D__i960_KB__}\ %{msa:-D__i960SA__ -D__i960_SA__}\ diff -Nrc3pad gcc-3.0/gcc/config/ia64/crtbegin.asm gcc-3.0.1/gcc/config/ia64/crtbegin.asm *** gcc-3.0/gcc/config/ia64/crtbegin.asm Thu Feb 22 15:01:01 2001 --- gcc-3.0.1/gcc/config/ia64/crtbegin.asm Thu Aug 9 09:19:52 2001 *************** __DTOR_LIST__: *** 32,45 **** dtor_ptr: data8 __DTOR_LIST__# + 8 - #ifndef SHARED - .type __ia64_app_header#,@object - .size __ia64_app_header#,8 - .global __ia64_app_header - __ia64_app_header: - data8 @segrel(.Lsegrel_ref#) - #endif - /* A handle for __cxa_finalize to manage c++ local destructors. */ .global __dso_handle# .type __dso_handle#,@object --- 32,37 ---- *************** __dso_handle: *** 84,113 **** br.call.sptk.many b0 = b6 ;; } - - #ifndef SHARED - /* - * Fragment of the ELF _init routine that sets up __ia64_app_header - */ - - .section .init,"ax","progbits" - .Lsegrel_ref: - { .mmi - addl r2 = @gprel(__ia64_app_header), gp - mov r16 = ip - ;; - } - { .mmi - ld8 r3 = [r2] - ;; - sub r16 = r16, r3 - ;; - } - { .mfb - st8 [r2] = r16 - ;; - } - #endif .section .text .align 16 --- 76,81 ---- diff -Nrc3pad gcc-3.0/gcc/config/ia64/fde-glibc.c gcc-3.0.1/gcc/config/ia64/fde-glibc.c *** gcc-3.0/gcc/config/ia64/fde-glibc.c Sun May 13 00:10:10 2001 --- gcc-3.0.1/gcc/config/ia64/fde-glibc.c Thu Aug 9 09:19:52 2001 *************** *** 1,4 **** ! /* Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Richard Henderson . This file is part of GNU CC. --- 1,4 ---- ! /* Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Richard Henderson . This file is part of GNU CC. *************** *** 28,84 **** /* Locate the FDE entry for a given address, using glibc ld.so routines to avoid register/deregister calls at DSO load/unload. */ #include #include - #include #include "unwind-ia64.h" ! /* Initialized by crtbegin from the main application. */ ! extern Elf64_Ehdr *__ia64_app_header; ! ! /* ??? A redeclaration of the lock in ld.so. Perhaps this should ! appear in in a new glibc version. */ ! __libc_lock_define (extern, _dl_load_lock) ! ! /* This always exists, even in a static application. */ ! extern struct link_map *_dl_loaded; ! static struct unw_table_entry * ! find_fde_for_dso (Elf64_Addr pc, Elf64_Ehdr *ehdr, ! unsigned long *pseg_base, unsigned long *pgp) { ! Elf64_Phdr *phdr, *p_unwind, *p_dynamic; long n, match; Elf64_Addr load_base, seg_base; struct unw_table_entry *f_base, *f; size_t lo, hi; ! /* Verify that we are looking at an ELF header. */ ! if (ehdr->e_ident[0] != 0x7f ! || ehdr->e_ident[1] != 'E' ! || ehdr->e_ident[2] != 'L' ! || ehdr->e_ident[3] != 'F' ! || ehdr->e_ident[EI_CLASS] != ELFCLASS64 ! || ehdr->e_ident[EI_DATA] != ELFDATA2LSB ! || ehdr->e_machine != EM_IA_64) ! abort (); match = 0; ! phdr = (Elf64_Phdr *)((char *)ehdr + ehdr->e_phoff); ! load_base = (ehdr->e_type == ET_DYN ? (Elf64_Addr)ehdr : 0); p_unwind = NULL; p_dynamic = NULL; /* See if PC falls into one of the loaded segments. Find the unwind segment at the same time. */ ! for (n = ehdr->e_phnum; --n >= 0; phdr++) { if (phdr->p_type == PT_LOAD) { Elf64_Addr vaddr = phdr->p_vaddr + load_base; ! if (pc >= vaddr && pc < vaddr + phdr->p_memsz) match = 1; } else if (phdr->p_type == PT_IA_64_UNWIND) p_unwind = phdr; --- 28,88 ---- /* Locate the FDE entry for a given address, using glibc ld.so routines to avoid register/deregister calls at DSO load/unload. */ + #ifndef _GNU_SOURCE + #define _GNU_SOURCE + #endif + #include "config.h" + #include #include #include #include "unwind-ia64.h" + #if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2) \ + || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && !defined(DT_CONFIG)) + # error You need GLIBC 2.2.4 or later on IA-64 Linux + #endif ! struct unw_ia64_callback_data ! { ! Elf64_Addr pc; ! unsigned long *segment_base; ! unsigned long *gp; ! struct unw_table_entry *ret; ! }; ! static int ! _Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr) { ! struct unw_ia64_callback_data *data = (struct unw_ia64_callback_data *) ptr; ! const Elf64_Phdr *phdr, *p_unwind, *p_dynamic; long n, match; Elf64_Addr load_base, seg_base; struct unw_table_entry *f_base, *f; size_t lo, hi; ! /* Make sure struct dl_phdr_info is at least as big as we need. */ ! if (size < offsetof (struct dl_phdr_info, dlpi_phnum) ! + sizeof (info->dlpi_phnum)) ! return -1; match = 0; ! phdr = info->dlpi_phdr; ! load_base = info->dlpi_addr; p_unwind = NULL; p_dynamic = NULL; + seg_base = ~(Elf64_Addr) 0; /* See if PC falls into one of the loaded segments. Find the unwind segment at the same time. */ ! for (n = info->dlpi_phnum; --n >= 0; phdr++) { if (phdr->p_type == PT_LOAD) { Elf64_Addr vaddr = phdr->p_vaddr + load_base; ! if (data->pc >= vaddr && data->pc < vaddr + phdr->p_memsz) match = 1; + if (vaddr < seg_base) + seg_base = vaddr; } else if (phdr->p_type == PT_IA_64_UNWIND) p_unwind = phdr; *************** find_fde_for_dso (Elf64_Addr pc, Elf64_E *** 86,97 **** p_dynamic = phdr; } if (!match || !p_unwind) ! return NULL; /* Search for the FDE within the unwind segment. */ f_base = (struct unw_table_entry *) (p_unwind->p_vaddr + load_base); - seg_base = (Elf64_Addr) ehdr; lo = 0; hi = p_unwind->p_memsz / sizeof (struct unw_table_entry); --- 90,100 ---- p_dynamic = phdr; } if (!match || !p_unwind) ! return 0; /* Search for the FDE within the unwind segment. */ f_base = (struct unw_table_entry *) (p_unwind->p_vaddr + load_base); lo = 0; hi = p_unwind->p_memsz / sizeof (struct unw_table_entry); *************** find_fde_for_dso (Elf64_Addr pc, Elf64_E *** 100,117 **** size_t mid = (lo + hi) / 2; f = f_base + mid; ! if (pc < f->start_offset + seg_base) hi = mid; ! else if (pc >= f->end_offset + seg_base) lo = mid + 1; else goto found; } ! return NULL; found: ! *pseg_base = seg_base; ! *pgp = 0; if (p_dynamic) { --- 103,121 ---- size_t mid = (lo + hi) / 2; f = f_base + mid; ! if (data->pc < f->start_offset + seg_base) hi = mid; ! else if (data->pc >= f->end_offset + seg_base) lo = mid + 1; else goto found; } ! return 0; found: ! *data->segment_base = seg_base; ! *data->gp = 0; ! data->ret = f; if (p_dynamic) { *************** find_fde_for_dso (Elf64_Addr pc, Elf64_E *** 121,128 **** for (; dyn->d_tag != DT_NULL ; dyn++) if (dyn->d_tag == DT_PLTGOT) { ! /* ??? Glibc seems to have relocated this already. */ ! *pgp = dyn->d_un.d_ptr; break; } } --- 125,132 ---- for (; dyn->d_tag != DT_NULL ; dyn++) if (dyn->d_tag == DT_PLTGOT) { ! /* On IA-64, _DYNAMIC is writable and GLIBC has relocated it. */ ! *data->gp = dyn->d_un.d_ptr; break; } } *************** find_fde_for_dso (Elf64_Addr pc, Elf64_E *** 131,140 **** /* Otherwise this is a static executable with no _DYNAMIC. The gp is constant program-wide. */ register unsigned long gp __asm__("gp"); ! *pgp = gp; } ! return f; } /* Return a pointer to the unwind table entry for the function --- 135,144 ---- /* Otherwise this is a static executable with no _DYNAMIC. The gp is constant program-wide. */ register unsigned long gp __asm__("gp"); ! *data->gp = gp; } ! return 1; } /* Return a pointer to the unwind table entry for the function *************** struct unw_table_entry * *** 144,177 **** _Unwind_FindTableEntry (void *pc, unsigned long *segment_base, unsigned long *gp) { ! struct unw_table_entry *ret; ! struct link_map *map; ! ! /* Check the main application first, hoping that most of the user's ! code is there instead of in some library. */ ! ret = find_fde_for_dso ((Elf64_Addr)pc, __ia64_app_header, ! segment_base, gp); ! if (ret) ! return ret; ! ! /* Glibc is probably unique in that we can (with certain restrictions) ! dynamicly load libraries into staticly linked applications. Thus ! we _always_ check _dl_loaded. */ ! ! __libc_lock_lock (_dl_load_lock); ! for (map = _dl_loaded; map ; map = map->l_next) ! { ! /* Skip the main application's entry. */ ! if (map->l_name[0] == 0) ! continue; ! ret = find_fde_for_dso ((Elf64_Addr)pc, (Elf64_Ehdr *)map->l_addr, ! segment_base, gp); ! if (ret) ! break; ! } ! __libc_lock_unlock (_dl_load_lock); ! return ret; } --- 148,162 ---- _Unwind_FindTableEntry (void *pc, unsigned long *segment_base, unsigned long *gp) { ! struct unw_ia64_callback_data data; ! data.pc = (Elf64_Addr) pc; ! data.segment_base = segment_base; ! data.gp = gp; ! data.ret = NULL; ! if (dl_iterate_phdr (_Unwind_IteratePhdrCallback, &data) < 0) ! return NULL; ! return data.ret; } diff -Nrc3pad gcc-3.0/gcc/config/ia64/ia64.h gcc-3.0.1/gcc/config/ia64/ia64.h *** gcc-3.0/gcc/config/ia64/ia64.h Fri Jun 8 10:10:35 2001 --- gcc-3.0.1/gcc/config/ia64/ia64.h Wed Jul 25 06:24:46 2001 *************** do { \ *** 1971,1977 **** that encode section info. */ #define STRIP_NAME_ENCODING(VAR, SYMBOL_NAME) \ ! (VAR) = (SYMBOL_NAME) + ((SYMBOL_NAME)[0] == SDATA_NAME_FLAG_CHAR) /* Position Independent Code. */ --- 1971,1979 ---- that encode section info. */ #define STRIP_NAME_ENCODING(VAR, SYMBOL_NAME) \ ! (VAR) = ((SYMBOL_NAME) \ ! + (*(SYMBOL_NAME) == '*' || *(SYMBOL_NAME) == SDATA_NAME_FLAG_CHAR)) ! /* Position Independent Code. */ diff -Nrc3pad gcc-3.0/gcc/config/ia64/ia64.md gcc-3.0.1/gcc/config/ia64/ia64.md *** gcc-3.0/gcc/config/ia64/ia64.md Tue May 22 13:04:11 2001 --- gcc-3.0.1/gcc/config/ia64/ia64.md Wed Jul 25 06:35:00 2001 *************** *** 4972,4980 **** { emit_library_call (gen_rtx_SYMBOL_REF (Pmode, \"__ia64_nonlocal_goto\"), LCT_NORETURN, VOIDmode, 3, ! operands[3], Pmode, copy_to_reg (XEXP (operands[2], 0)), Pmode, ! operands[1], Pmode); emit_barrier (); DONE; }") --- 4972,4980 ---- { emit_library_call (gen_rtx_SYMBOL_REF (Pmode, \"__ia64_nonlocal_goto\"), LCT_NORETURN, VOIDmode, 3, ! operands[1], Pmode, copy_to_reg (XEXP (operands[2], 0)), Pmode, ! operands[3], Pmode); emit_barrier (); DONE; }") diff -Nrc3pad gcc-3.0/gcc/config/m68hc11/larith.asm gcc-3.0.1/gcc/config/m68hc11/larith.asm *** gcc-3.0/gcc/config/m68hc11/larith.asm Fri May 4 13:58:19 2001 --- gcc-3.0.1/gcc/config/m68hc11/larith.asm Fri Aug 3 14:05:49 2001 *************** __premain: *** 179,191 **** ;; ;; Exit operation. Just loop forever and wait for interrupts. ;; (no other place to go) ;; ! .sect .text ! .globl _exit .globl exit .weak exit exit: _exit: fatal: cli wai --- 179,204 ---- ;; ;; Exit operation. Just loop forever and wait for interrupts. ;; (no other place to go) + ;; This operation is split in several pieces collected together by + ;; the linker script. This allows to support destructors at the + ;; exit stage while not impacting program sizes when there is no + ;; destructors. ;; ! ;; _exit: ! ;; *(.fini0) /* Beginning of finish code (_exit symbol). */ ! ;; *(.fini1) /* Place holder for applications. */ ! ;; *(.fini2) /* C++ destructors. */ ! ;; *(.fini3) /* Place holder for applications. */ ! ;; *(.fini4) /* Runtime exit. */ ! ;; ! .sect .fini0,"ax",@progbits ! .globl _exit .globl exit .weak exit exit: _exit: + + .sect .fini4,"ax",@progbits fatal: cli wai *************** A_low_B_low: *** 1035,1041 **** #ifdef L_map_data ! .sect .install3,"ax",@progbits .globl __map_data_section __map_data_section: --- 1048,1054 ---- #ifdef L_map_data ! .sect .install2,"ax",@progbits .globl __map_data_section __map_data_section: *************** Done: *** 1063,1069 **** #ifdef L_init_bss ! .sect .install3,"ax",@progbits .globl __init_bss_section __init_bss_section: --- 1076,1082 ---- #ifdef L_init_bss ! .sect .install2,"ax",@progbits .globl __init_bss_section __init_bss_section: *************** Loop: *** 1083,1089 **** Done: #endif ! ;----------------------------------------- ; end required gcclib code ;----------------------------------------- --- 1096,1153 ---- Done: #endif ! ! #ifdef L_ctor ! ! ; End of constructor table ! .sect .install3,"ax",@progbits ! .globl __do_global_ctors ! ! __do_global_ctors: ! ; Start from the end - sizeof(void*) ! ldx #__CTOR_END__-2 ! ctors_loop: ! cpx #__CTOR_LIST__ ! blt ctors_done ! pshx ! ldx 0,x ! jsr 0,x ! pulx ! dex ! dex ! bra ctors_loop ! ctors_done: ! ! #endif ! ! #ifdef L_dtor ! ! .sect .fini3,"ax",@progbits ! .globl __do_global_dtors ! ! ;; ! ;; This piece of code is inserted in the _exit() code by the linker. ! ;; ! __do_global_dtors: ! pshb ; Save exit code ! psha ! ldx #__DTOR_LIST__ ! dtors_loop: ! cpx #__DTOR_END__ ! bge dtors_done ! pshx ! ldx 0,x ! jsr 0,x ! pulx ! inx ! inx ! bra dtors_loop ! dtors_done: ! pula ; Restore exit code ! pulb ! ! #endif ! ;----------------------------------------- ; end required gcclib code ;----------------------------------------- diff -Nrc3pad gcc-3.0/gcc/config/m68hc11/m68hc11.c gcc-3.0.1/gcc/config/m68hc11/m68hc11.c *** gcc-3.0/gcc/config/m68hc11/m68hc11.c Mon Jun 11 15:15:11 2001 --- gcc-3.0.1/gcc/config/m68hc11/m68hc11.c Fri Jul 20 12:38:15 2001 *************** m68hc11_initial_elimination_offset (from *** 1254,1260 **** if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) { ! return 0; } /* Push any 2 byte pseudo hard registers that we need to save. */ --- 1254,1260 ---- if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) { ! return m68hc11_sp_correction; } /* Push any 2 byte pseudo hard registers that we need to save. */ *************** m68hc11_initial_elimination_offset (from *** 1273,1279 **** if (from == FRAME_POINTER_REGNUM && to == HARD_SP_REGNUM) { ! return size - m68hc11_sp_correction; } return 0; } --- 1273,1279 ---- if (from == FRAME_POINTER_REGNUM && to == HARD_SP_REGNUM) { ! return size; } return 0; } *************** m68hc11_gen_highpart (mode, x) *** 1939,1956 **** } /* gen_highpart crashes when it is called with a SUBREG. */ ! if (GET_CODE (x) == SUBREG && SUBREG_WORD (x) != 0) { return gen_rtx (SUBREG, mode, XEXP (x, 0), XEXP (x, 1)); } ! x = gen_highpart (mode, x); - /* Return a different rtx to avoid to share it in several insns - (when used by a split pattern). Sharing addresses within - a MEM breaks the Z register replacement (and reloading). */ if (GET_CODE (x) == MEM) ! x = copy_rtx (x); ! return x; } --- 1939,1968 ---- } /* gen_highpart crashes when it is called with a SUBREG. */ ! if (GET_CODE (x) == SUBREG) { return gen_rtx (SUBREG, mode, XEXP (x, 0), XEXP (x, 1)); } ! if (GET_CODE (x) == REG) ! { ! if (REGNO (x) < FIRST_PSEUDO_REGISTER) ! return gen_rtx (REG, mode, REGNO (x)); ! else ! return gen_rtx_SUBREG (mode, x, 0); ! } if (GET_CODE (x) == MEM) ! { ! x = change_address (x, mode, 0); ! ! /* Return a different rtx to avoid to share it in several insns ! (when used by a split pattern). Sharing addresses within ! a MEM breaks the Z register replacement (and reloading). */ ! if (GET_CODE (x) == MEM) ! x = copy_rtx (x); ! return x; ! } ! abort (); } diff -Nrc3pad gcc-3.0/gcc/config/m68hc11/m68hc11.h gcc-3.0.1/gcc/config/m68hc11/m68hc11.h *** gcc-3.0/gcc/config/m68hc11/m68hc11.h Mon Jun 11 15:15:11 2001 --- gcc-3.0.1/gcc/config/m68hc11/m68hc11.h Fri Aug 3 14:05:49 2001 *************** extern enum reg_class m68hc11_tmp_regs_c *** 877,884 **** If FRAME_GROWS_DOWNWARD, this is the offset to the END of the first local allocated. Otherwise, it is the offset to the BEGINNING of the first local allocated. */ ! extern int m68hc11_sp_correction; ! #define STARTING_FRAME_OFFSET m68hc11_sp_correction /* Offset of first parameter from the argument pointer register value. */ --- 877,883 ---- If FRAME_GROWS_DOWNWARD, this is the offset to the END of the first local allocated. Otherwise, it is the offset to the BEGINNING of the first local allocated. */ ! #define STARTING_FRAME_OFFSET 0 /* Offset of first parameter from the argument pointer register value. */ *************** extern int m68hc11_sp_correction; *** 894,903 **** #define INCOMING_RETURN_ADDR_RTX \ gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM)) ! /* After the prologue, RA is at -2(AP) in the current frame. */ #define RETURN_ADDR_RTX(COUNT, FRAME) \ ((COUNT) == 0 \ ! ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -2))\ : 0) /* Before the prologue, the top of the frame is at 2(sp). */ --- 893,902 ---- #define INCOMING_RETURN_ADDR_RTX \ gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM)) ! /* After the prologue, RA is at 0(AP) in the current frame. */ #define RETURN_ADDR_RTX(COUNT, FRAME) \ ((COUNT) == 0 \ ! ? gen_rtx_MEM (Pmode, arg_pointer_rtx) \ : 0) /* Before the prologue, the top of the frame is at 2(sp). */ *************** do { *** 1613,1618 **** --- 1612,1663 ---- /* Output before uninitialized data. */ #define BSS_SECTION_ASM_OP ("\t.sect\t.bss") + + /* This is the pseudo-op used to generate a reference to a specific + symbol in some section. It is only used in machine-specific + configuration files, typically only in ASM_OUTPUT_CONSTRUCTOR and + ASM_OUTPUT_DESTRUCTOR. This is the same for all known svr4 + assemblers, except those in targets that don't use 32-bit pointers. + Those should override INT_ASM_OP. Yes, the name of the macro is + misleading. */ + #undef INT_ASM_OP + #define INT_ASM_OP "\t.word\t" + + /* Define the pseudo-ops used to switch to the .ctors and .dtors sections. + + Same as config/elfos.h but don't mark these section SHF_WRITE since + there is no shared library problem. */ + #undef CTORS_SECTION_ASM_OP + #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"a\"" + + #undef DTORS_SECTION_ASM_OP + #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"a\"" + + #undef CTORS_SECTION_FUNCTION + #define CTORS_SECTION_FUNCTION \ + void \ + ctors_section () \ + { \ + if (in_section != in_ctors) \ + { \ + fprintf (asm_out_file, "\t.globl\t__do_global_ctors\n"); \ + fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ + in_section = in_ctors; \ + } \ + } + + #undef DTORS_SECTION_FUNCTION + #define DTORS_SECTION_FUNCTION \ + void \ + dtors_section () \ + { \ + if (in_section != in_dtors) \ + { \ + fprintf (asm_out_file, "\t.globl\t__do_global_dtors\n"); \ + fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ + in_section = in_dtors; \ + } \ + } /* This is how to begin an assembly language file. Most svr4 assemblers want at least a .file directive to come first, and some want to see a .version diff -Nrc3pad gcc-3.0/gcc/config/m68hc11/m68hc11.md gcc-3.0.1/gcc/config/m68hc11/m68hc11.md *** gcc-3.0/gcc/config/m68hc11/m68hc11.md Mon Jun 11 15:04:55 2001 --- gcc-3.0.1/gcc/config/m68hc11/m68hc11.md Sat Aug 4 04:30:00 2001 *************** *** 303,315 **** (define_insn "cmphi_1" [(set (cc0) (compare (match_operand:HI 0 "tst_operand" ! "xy,d,?xy,d,dxy,dxy,dxy") (match_operand:HI 1 "cmp_operand" ! "i,i,m,m,?*d*A,?u,!*w")))] "" "* { ! if (H_REG_P (operands[1])) return \"#\"; else return \"cp%0\\t%1\"; --- 303,320 ---- (define_insn "cmphi_1" [(set (cc0) (compare (match_operand:HI 0 "tst_operand" ! "x,dy,xyd,?xy,d,m,!u,dxy,dxy") (match_operand:HI 1 "cmp_operand" ! "i,i,!u,m,m,dxy,dxy,?*d*A,!*w")))] "" "* { ! if (H_REG_P (operands[1]) && !H_REG_P (operands[0])) ! { ! cc_status.flags |= CC_REVERSED; ! return \"cp%1\\t%0\"; ! } ! else if (H_REG_P (operands[1])) return \"#\"; else return \"cp%0\\t%1\"; *************** *** 317,334 **** (define_insn "cmphi_z_used" [(set (cc0) ! (compare (match_operand:HI 0 "hard_reg_operand" "dxy") ! (match_operand:HI 1 "cmp_operand" "m"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy")) (use (reg:HI 11))] "" "#") (define_split /* "cmphi_z_used" */ [(set (cc0) ! (compare (match_operand:HI 0 "hard_reg_operand" "dxy") ! (match_operand:HI 1 "cmp_operand" "m"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) --- 322,339 ---- (define_insn "cmphi_z_used" [(set (cc0) ! (compare (match_operand:HI 0 "tst_operand" "dxy,m") ! (match_operand:HI 1 "cmp_operand" "m,dxy"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy")) (use (reg:HI 11))] "" "#") (define_split /* "cmphi_z_used" */ [(set (cc0) ! (compare (match_operand:HI 0 "tst_operand" "dxy,m") ! (match_operand:HI 1 "cmp_operand" "m,dxy"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) *************** *** 385,412 **** (define_insn "bitcmpqi" [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "d,d,d") ! (match_operand:QI 1 "cmp_operand" "im,*A,u")))] "" "@ ! bitb\\t%1 # ! bitb\\t%1") ! (define_insn "bitcmpqi_z_used" [(set (cc0) (and:QI (match_operand:QI 0 "tst_operand" "d") ! (match_operand:QI 1 "cmp_operand" "m"))) ! (use (match_operand:HI 2 "hard_reg_operand" "xy")) (use (reg:HI 11))] "" "#") (define_split /* "bitcmpqi_z_used" */ [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "d") ! (match_operand:QI 1 "cmp_operand" "m"))) ! (use (match_operand:HI 2 "hard_reg_operand" "xy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI 3))) (match_dup 2)) --- 390,430 ---- (define_insn "bitcmpqi" [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "d,d,d,m,!u") ! (match_operand:QI 1 "cmp_operand" "im,*B,u,d,d")))] "" "@ ! bitb\\t%b1 # ! bitb\\t%b1 ! bitb\\t%b0 ! bitb\\t%b0") ! (define_split /* "bitcmpqi" */ [(set (cc0) (and:QI (match_operand:QI 0 "tst_operand" "d") ! (match_operand:QI 1 "hard_addr_reg_operand" "xy")))] ! "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode" ! [(set (match_dup 3) (match_dup 2)) ! (set (cc0) (and:QI (match_dup 0) (match_dup 4)))] ! "operands[2] = gen_rtx (REG, HImode, REGNO (operands[1])); ! operands[3] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM); ! operands[4] = gen_rtx (REG, QImode, SOFT_TMP_REGNUM);") ! ! (define_insn "bitcmpqi_z_used" ! [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "d,m") ! (match_operand:QI 1 "cmp_operand" "m,d"))) ! (use (match_operand:HI 2 "hard_reg_operand" "xy,xy")) (use (reg:HI 11))] "" "#") (define_split /* "bitcmpqi_z_used" */ [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "d,m") ! (match_operand:QI 1 "cmp_operand" "m,d"))) ! (use (match_operand:HI 2 "hard_reg_operand" "xy,xy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI 3))) (match_dup 2)) *************** *** 466,494 **** (define_insn "cmpqi_1" [(set (cc0) ! (compare (match_operand:QI 0 "tst_operand" "d,d,*x*y,*x*y") ! (match_operand:QI 1 "cmp_operand" "im,!u,!u,?dim*x*y")))] "" ! "@ ! cmpb\\t%1 ! cmpb\\t%b1 ! # ! #") (define_insn "cmpqi_z_used" [(set (cc0) ! (compare (match_operand:QI 0 "hard_reg_operand" "dxy") ! (match_operand:QI 1 "cmp_operand" "m"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy")) (use (reg:HI 11))] "" "#") (define_split /* cmpqi_z_used */ [(set (cc0) ! (compare (match_operand:QI 0 "hard_reg_operand" "dxy") ! (match_operand:QI 1 "cmp_operand" "m"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) --- 484,520 ---- (define_insn "cmpqi_1" [(set (cc0) ! (compare (match_operand:QI 0 "tst_operand" "d,m,d,!u,*B,d") ! (match_operand:QI 1 "cmp_operand" "im,d,!u,d,?dim*B,*u")))] "" ! "* ! { ! if (A_REG_P (operands[0]) || A_REG_P (operands[1])) ! { ! return \"#\"; ! } ! else if (D_REG_P (operands[0])) ! { ! return \"cmpb\\t%b1\"; ! } ! cc_status.flags |= CC_REVERSED; ! return \"cmpb\\t%b0\"; ! }") (define_insn "cmpqi_z_used" [(set (cc0) ! (compare (match_operand:QI 0 "tst_operand" "dxy,m") ! (match_operand:QI 1 "cmp_operand" "m,dxy"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy")) (use (reg:HI 11))] "" "#") (define_split /* cmpqi_z_used */ [(set (cc0) ! (compare (match_operand:QI 0 "tst_operand" "dxy,m") ! (match_operand:QI 1 "cmp_operand" "m,dxy"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) *************** *** 587,593 **** ;; The insn will be split in one or several memory moves (movw). ;; [SCz: this does not work ?? So, I switched temporary to 'd' reg] ;;-------------------------------------------------------------------- ! (define_insn "movdi" [(set (match_operand:DI 0 "nonimmediate_operand" "=U,!u,U,m,m,!u") (match_operand:DI 1 "general_operand" "iU,iU,!u,mi,!u,!mu")) (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))] --- 613,640 ---- ;; The insn will be split in one or several memory moves (movw). ;; [SCz: this does not work ?? So, I switched temporary to 'd' reg] ;;-------------------------------------------------------------------- ! (define_expand "movdi" ! [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (match_operand:DI 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))])] ! "" ! " ! /* For push/pop, emit a REG_INC note to make sure the reload ! inheritance and reload CSE pass notice the change of the stack ! pointer. */ ! if (IS_STACK_PUSH (operands[0]) || IS_STACK_POP (operands[1])) ! { ! rtx insn; ! ! insn = emit_insn (gen_movdi_internal (operands[0], operands[1])); ! REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, ! stack_pointer_rtx, ! REG_NOTES (insn)); ! DONE; ! } ! ") ! ! (define_insn "movdi_internal" [(set (match_operand:DI 0 "nonimmediate_operand" "=U,!u,U,m,m,!u") (match_operand:DI 1 "general_operand" "iU,iU,!u,mi,!u,!mu")) (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))] *************** *** 603,609 **** "m68hc11_split_move (operands[0], operands[1], operands[2]); DONE;") ! (define_insn "movdf" [(set (match_operand:DF 0 "nonimmediate_operand" "=U,!u,U,m,m,!u") (match_operand:DF 1 "general_operand" "iU,iU,!u,mi,!u,!mu")) (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))] --- 650,676 ---- "m68hc11_split_move (operands[0], operands[1], operands[2]); DONE;") ! (define_expand "movdf" ! [(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "") ! (match_operand:DF 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))])] ! "" ! "/* For push/pop, emit a REG_INC note to make sure the reload ! inheritance and reload CSE pass notice the change of the stack ! pointer. */ ! if (IS_STACK_PUSH (operands[0]) || IS_STACK_POP (operands[1])) ! { ! rtx insn; ! ! insn = emit_insn (gen_movdf_internal (operands[0], operands[1])); ! REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, ! stack_pointer_rtx, ! REG_NOTES (insn)); ! DONE; ! } ! ") ! ! (define_insn "movdf_internal" [(set (match_operand:DF 0 "nonimmediate_operand" "=U,!u,U,m,m,!u") (match_operand:DF 1 "general_operand" "iU,iU,!u,mi,!u,!mu")) (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))] *************** *** 618,624 **** [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); DONE;") ! ;;-------------------------------------------------------------------- ;;- 32-bit Move Operations. ;; The movsi and movsf patterns are identical except for the mode. --- 685,691 ---- [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); DONE;") ! ;;-------------------------------------------------------------------- ;;- 32-bit Move Operations. ;; The movsi and movsf patterns are identical except for the mode. *************** *** 628,634 **** ;; pass does not give us a register that dies in the insn and is used ;; for input/output operands. ;;-------------------------------------------------------------------- ! (define_insn "movsi" [(set (match_operand:SI 0 "nonimmediate_operand" "=mu,?D,m,?D,?u,?u,!u,D") (match_operand:SI 1 "general_operand" "imu,im,?D,!u,?D,mi,!u,!D")) (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] --- 695,721 ---- ;; pass does not give us a register that dies in the insn and is used ;; for input/output operands. ;;-------------------------------------------------------------------- ! (define_expand "movsi" ! [(parallel [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (match_operand:SI 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))])] ! "" ! "/* For push/pop, emit a REG_INC note to make sure the reload ! inheritance and reload CSE pass notice the change of the stack ! pointer. */ ! if (IS_STACK_PUSH (operands[0]) || IS_STACK_POP (operands[1])) ! { ! rtx insn; ! ! insn = emit_insn (gen_movsi_internal (operands[0], operands[1])); ! REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, ! stack_pointer_rtx, ! REG_NOTES (insn)); ! DONE; ! } ! ") ! ! (define_insn "movsi_internal" [(set (match_operand:SI 0 "nonimmediate_operand" "=mu,?D,m,?D,?u,?u,!u,D") (match_operand:SI 1 "general_operand" "imu,im,?D,!u,?D,mi,!u,!D")) (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] *************** *** 644,650 **** "m68hc11_split_move (operands[0], operands[1], operands[2]); DONE;") ! (define_insn "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D") (match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D")) (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] --- 731,757 ---- "m68hc11_split_move (operands[0], operands[1], operands[2]); DONE;") ! (define_expand "movsf" ! [(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "") ! (match_operand:SF 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))])] ! "" ! "/* For push/pop, emit a REG_INC note to make sure the reload ! inheritance and reload CSE pass notice the change of the stack ! pointer. */ ! if (IS_STACK_PUSH (operands[0]) || IS_STACK_POP (operands[1])) ! { ! rtx insn; ! ! insn = emit_insn (gen_movsf_internal (operands[0], operands[1])); ! REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, ! stack_pointer_rtx, ! REG_NOTES (insn)); ! DONE; ! } ! ") ! ! (define_insn "movsf_internal" [(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D") (match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D")) (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] *************** *** 739,744 **** --- 846,864 ---- operands[1] = force_reg (HImode, operands[1]); } } + /* For push/pop, emit a REG_INC note to make sure the reload + inheritance and reload CSE pass notice the change of the stack + pointer. */ + if (IS_STACK_PUSH (operands[0]) || IS_STACK_POP (operands[1])) + { + rtx insn; + + insn = emit_insn (gen_rtx (SET, VOIDmode, operands[0], operands[1])); + REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, + stack_pointer_rtx, + REG_NOTES (insn)); + DONE; + } }") (define_insn "movhi_const0" *************** *** 866,871 **** --- 986,1004 ---- operands[1] = force_reg (QImode, operands[1]); } } + /* For push/pop, emit a REG_INC note to make sure the reload + inheritance and reload CSE pass notice the change of the stack + pointer. */ + if (IS_STACK_PUSH (operands[0]) || IS_STACK_POP (operands[1])) + { + rtx insn; + + insn = emit_insn (gen_rtx (SET, VOIDmode, operands[0], operands[1])); + REG_NOTES (insn) = alloc_EXPR_LIST (REG_INC, + stack_pointer_rtx, + REG_NOTES (insn)); + DONE; + } }") (define_insn "*movqi_68hc12" *************** *** 1445,1451 **** (define_insn "extendhisi2" [(set (match_operand:SI 0 "register_operand" "=D,D,D") ! (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "m,!r,0")))] "" "* { --- 1578,1584 ---- (define_insn "extendhisi2" [(set (match_operand:SI 0 "register_operand" "=D,D,D") ! (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "m,!r,dA")))] "" "* { *************** *** 2176,2182 **** (define_insn "*addhi3" [(set (match_operand:HI 0 "hard_reg_operand" "=A,d,!A,d*A,!d") (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0,0") ! (match_operand:HI 2 "general_operand" "N,i,I,umi*A*d,!*d*w")))] "TARGET_M6811" "* { --- 2309,2315 ---- (define_insn "*addhi3" [(set (match_operand:HI 0 "hard_reg_operand" "=A,d,!A,d*A,!d") (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0,0") ! (match_operand:HI 2 "general_operand" "N,i,I,mi*A*d,!u*d*w")))] "TARGET_M6811" "* { *************** *** 2514,2520 **** (define_insn "*subhi3_sp" [(set (match_operand:HI 0 "stack_register_operand" "=w,w") (minus:HI (match_operand:HI 1 "register_operand" "0,0") ! (match_operand:HI 2 "general_operand" "uim*d,!*A"))) (clobber (match_scratch:HI 3 "=A*d,A*d"))] "" "* --- 2647,2653 ---- (define_insn "*subhi3_sp" [(set (match_operand:HI 0 "stack_register_operand" "=w,w") (minus:HI (match_operand:HI 1 "register_operand" "0,0") ! (match_operand:HI 2 "general_operand" "im*d,!u*A"))) (clobber (match_scratch:HI 3 "=A*d,A*d"))] "" "* *************** *** 2563,2571 **** (define_insn "*subhi3" ! [(set (match_operand:HI 0 "register_operand" "=d,*A") ! (minus:HI (match_operand:HI 1 "register_operand" "0,0") ! (match_operand:HI 2 "general_operand" "uim*A*d,uim*d*A")))] "" "* { --- 2696,2704 ---- (define_insn "*subhi3" ! [(set (match_operand:HI 0 "register_operand" "=d,*A,d*A") ! (minus:HI (match_operand:HI 1 "register_operand" "0,0,0") ! (match_operand:HI 2 "general_operand" "im*A*d,im*d*A,!u")))] "" "* { *************** *** 2993,2999 **** (define_insn "andqi3" [(set (match_operand:QI 0 "register_operand" "=d,!u,d,d,?*A,?*A,!*q") (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,i,!um,?*A,i!um,?*A,i!um*A")))] "" "* { --- 3126,3132 ---- (define_insn "andqi3" [(set (match_operand:QI 0 "register_operand" "=d,!u,d,d,?*A,?*A,!*q") (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,i,!um,?*A,!ium,?*A*d,!ium*A")))] "" "* { *************** *** 3100,3106 **** (define_insn "iorqi3" [(set (match_operand:QI 0 "register_operand" "=d,!u,d,d,?*A,?*A,!*q") (ior:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,i,!um,!*A,i!um,!*A,i!um*A")))] "" "* { --- 3233,3239 ---- (define_insn "iorqi3" [(set (match_operand:QI 0 "register_operand" "=d,!u,d,d,?*A,?*A,!*q") (ior:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,i,!um,!*A,!ium,?*A*d,!ium*A")))] "" "* { *************** *** 3194,3202 **** }") (define_insn "xorqi3" ! [(set (match_operand:QI 0 "register_operand" "=d,d,!*u*A,!*u*A,!*q") ! (xor:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "ium,!*A,ium,!*A,ium*A*u")))] "" "* { --- 3327,3335 ---- }") (define_insn "xorqi3" ! [(set (match_operand:QI 0 "register_operand" "=d,d,d,?*A,?*A,!*q") ! (xor:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,!um,!*A,!ium,?*A*d,!ium*A")))] "" "* { *************** *** 4190,4197 **** is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { output_asm_insn (\"pshy\", operands); ! output_asm_insn (\"ldy\\t%1\", operands); output_asm_insn (\"bsr\\t___ashlsi3\", operands); return \"puly\"; } --- 4323,4337 ---- is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { + rtx ops[1]; + + ops[0] = operands[1]; output_asm_insn (\"pshy\", operands); ! if (reg_mentioned_p (stack_pointer_rtx, operands[1])) ! { ! ops[0] = adj_offsettable_operand (operands[1], 2); ! } ! output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashlsi3\", operands); return \"puly\"; } *************** *** 4591,4598 **** is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { output_asm_insn (\"pshy\", operands); ! output_asm_insn (\"ldy\\t%1\", operands); output_asm_insn (\"bsr\\t___ashrsi3\", operands); return \"puly\"; } --- 4731,4745 ---- is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { + rtx ops[1]; + + ops[0] = operands[1]; output_asm_insn (\"pshy\", operands); ! if (reg_mentioned_p (stack_pointer_rtx, operands[1])) ! { ! ops[0] = adj_offsettable_operand (operands[1], 2); ! } ! output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashrsi3\", operands); return \"puly\"; } *************** *** 4928,4935 **** is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { output_asm_insn (\"pshy\", operands); ! output_asm_insn (\"ldy\\t%1\", operands); output_asm_insn (\"bsr\\t___lshrsi3\", operands); return \"puly\"; } --- 5075,5089 ---- is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { + rtx ops[1]; + + ops[0] = operands[1]; output_asm_insn (\"pshy\", operands); ! if (reg_mentioned_p (stack_pointer_rtx, operands[1])) ! { ! ops[0] = adj_offsettable_operand (operands[1], 2); ! } ! output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___lshrsi3\", operands); return \"puly\"; } diff -Nrc3pad gcc-3.0/gcc/config/m68hc11/t-m68hc11-gas gcc-3.0.1/gcc/config/m68hc11/t-m68hc11-gas *** gcc-3.0/gcc/config/m68hc11/t-m68hc11-gas Fri May 4 13:58:19 2001 --- gcc-3.0.1/gcc/config/m68hc11/t-m68hc11-gas Fri Aug 3 14:05:49 2001 *************** LIB1ASMFUNCS = _mulsi3 \ *** 25,31 **** _regs_d3_4 _regs_d5_6 _regs_d7_8 _regs_d9_16 _regs_d17_32 \ _premain __exit _abort _cleanup \ _adddi3 _subdi3 _notdi2 \ ! _ashrhi3 _lshrhi3 _lshlhi3 _ashrqi3 _lshlqi3 _map_data _init_bss TARGET_LIBGCC2_CFLAGS = -DUSE_GAS -DIN_GCC --- 25,32 ---- _regs_d3_4 _regs_d5_6 _regs_d7_8 _regs_d9_16 _regs_d17_32 \ _premain __exit _abort _cleanup \ _adddi3 _subdi3 _notdi2 \ ! _ashrhi3 _lshrhi3 _lshlhi3 _ashrqi3 _lshlqi3 _map_data _init_bss \ ! _ctor _dtor TARGET_LIBGCC2_CFLAGS = -DUSE_GAS -DIN_GCC diff -Nrc3pad gcc-3.0/gcc/config/m68k/linux-aout.h gcc-3.0.1/gcc/config/m68k/linux-aout.h *** gcc-3.0/gcc/config/m68k/linux-aout.h Thu Nov 2 15:29:10 2000 --- gcc-3.0.1/gcc/config/m68k/linux-aout.h Mon Jul 30 14:32:28 2001 *************** Boston, MA 02111-1307, USA. */ *** 41,47 **** #endif #undef SUBTARGET_SWITCHES ! #define SUBTARGET_SWITCHES {"ieee-fp", 0}, #undef ASM_SPEC #define ASM_SPEC \ --- 41,48 ---- #endif #undef SUBTARGET_SWITCHES ! #define SUBTARGET_SWITCHES {"ieee-fp", 0, \ ! N_("Use IEEE math for fp comparisons") }, #undef ASM_SPEC #define ASM_SPEC \ diff -Nrc3pad gcc-3.0/gcc/config/m68k/linux.h gcc-3.0.1/gcc/config/m68k/linux.h *** gcc-3.0/gcc/config/m68k/linux.h Thu Nov 2 15:29:10 2000 --- gcc-3.0.1/gcc/config/m68k/linux.h Mon Jul 30 14:32:28 2001 *************** Boston, MA 02111-1307, USA. */ *** 42,48 **** #define STRICT_ALIGNMENT 0 #undef SUBTARGET_SWITCHES ! #define SUBTARGET_SWITCHES {"ieee-fp", 0}, /* Here are four prefixes that are used by asm_fprintf to facilitate customization for alternate assembler syntaxes. --- 42,49 ---- #define STRICT_ALIGNMENT 0 #undef SUBTARGET_SWITCHES ! #define SUBTARGET_SWITCHES {"ieee-fp", 0, \ ! N_("Use IEEE math for fp comparisons")}, /* Here are four prefixes that are used by asm_fprintf to facilitate customization for alternate assembler syntaxes. diff -Nrc3pad gcc-3.0/gcc/config/m68k/m68k.c gcc-3.0.1/gcc/config/m68k/m68k.c *** gcc-3.0/gcc/config/m68k/m68k.c Sat May 12 13:32:50 2001 --- gcc-3.0.1/gcc/config/m68k/m68k.c Mon Jul 30 23:18:33 2001 *************** Boston, MA 02111-1307, USA. */ *** 33,38 **** --- 33,40 ---- #include "insn-attr.h" #include "recog.h" #include "toplev.h" + #include "expr.h" + #include "reload.h" #include "tm_p.h" /* Needed for use_return_insn. */ *************** not_sp_operand (op, mode) *** 877,883 **** register rtx op; enum machine_mode mode; { ! return op != stack_pointer_rtx && general_operand (op, mode); } /* Return TRUE if X is a valid comparison operator for the dbcc --- 879,885 ---- register rtx op; enum machine_mode mode; { ! return op != stack_pointer_rtx && nonimmediate_operand (op, mode); } /* Return TRUE if X is a valid comparison operator for the dbcc diff -Nrc3pad gcc-3.0/gcc/config/m68k/m68k.h gcc-3.0.1/gcc/config/m68k/m68k.h *** gcc-3.0/gcc/config/m68k/m68k.h Mon Jan 1 12:35:31 2001 --- gcc-3.0.1/gcc/config/m68k/m68k.h Mon Jul 30 14:32:28 2001 *************** extern int target_flags; *** 147,209 **** where VALUE is the bits to set or minus the bits to clear. An empty string NAME is used to identify the default VALUE. */ ! #define TARGET_SWITCHES \ ! { { "68020", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY)}, \ ! { "c68020", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY)}, \ ! { "68020", (MASK_68020|MASK_BITFIELD)}, \ ! { "c68020", (MASK_68020|MASK_BITFIELD)}, \ { "68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881)}, \ { "c68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881)}, \ ! { "bitfield", MASK_BITFIELD}, \ ! { "nobitfield", - MASK_BITFIELD}, \ ! { "rtd", MASK_RTD}, \ ! { "nortd", - MASK_RTD}, \ ! { "short", MASK_SHORT}, \ ! { "noshort", - MASK_SHORT}, \ ! { "fpa", -(MASK_SKY|MASK_68040_ONLY|MASK_68881)}, \ ! { "fpa", MASK_FPA}, \ ! { "nofpa", - MASK_FPA}, \ ! { "sky", -(MASK_FPA|MASK_68040_ONLY|MASK_68881)}, \ ! { "sky", MASK_SKY}, \ ! { "nosky", - MASK_SKY}, \ ! { "68881", - (MASK_FPA|MASK_SKY)}, \ ! { "68881", MASK_68881}, \ ! { "soft-float", - (MASK_FPA|MASK_SKY|MASK_68040_ONLY|MASK_68881)}, \ ! { "68020-40", -(MASK_5200|MASK_68060|MASK_68040_ONLY)}, \ ! { "68020-40", (MASK_BITFIELD|MASK_68881|MASK_68020|MASK_68040)}, \ ! { "68020-60", -(MASK_5200|MASK_68040_ONLY)}, \ { "68020-60", (MASK_BITFIELD|MASK_68881|MASK_68020|MASK_68040 \ ! |MASK_68060)}, \ ! { "68030", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY)}, \ ! { "68030", (MASK_68020|MASK_BITFIELD)}, \ ! { "68040", - (MASK_5200|MASK_68060)}, \ { "68040", (MASK_68020|MASK_68881|MASK_BITFIELD \ ! |MASK_68040_ONLY|MASK_68040)}, \ ! { "68060", - (MASK_5200|MASK_68040)}, \ { "68060", (MASK_68020|MASK_68881|MASK_BITFIELD \ ! |MASK_68040_ONLY|MASK_68060)}, \ { "5200", - (MASK_68060|MASK_68040|MASK_68040_ONLY|MASK_68020 \ ! |MASK_BITFIELD|MASK_68881)}, \ ! { "5200", (MASK_5200)}, \ ! { "68851", 0}, \ ! { "no-68851", 0}, \ { "68302", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881)}, \ { "68332", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_BITFIELD|MASK_68881)}, \ ! { "68332", MASK_68020}, \ { "cpu32", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_BITFIELD|MASK_68881)}, \ ! { "cpu32", MASK_68020}, \ ! { "align-int", MASK_ALIGN_INT }, \ ! { "no-align-int", -MASK_ALIGN_INT }, \ ! { "pcrel", MASK_PCREL}, \ ! { "strict-align", -MASK_NO_STRICT_ALIGNMENT}, \ ! { "no-strict-align", MASK_NO_STRICT_ALIGNMENT}, \ SUBTARGET_SWITCHES \ ! { "", TARGET_DEFAULT}} /* TARGET_DEFAULT is defined in sun*.h and isi.h, etc. */ /* This macro is similar to `TARGET_SWITCHES' but defines names of --- 147,242 ---- where VALUE is the bits to set or minus the bits to clear. An empty string NAME is used to identify the default VALUE. */ ! #define TARGET_SWITCHES \ ! { { "68020", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY), \ ! N_("Generate code for a 68020") }, \ ! { "c68020", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY), \ ! N_("Generate code for a 68020") }, \ ! { "68020", (MASK_68020|MASK_BITFIELD), "" }, \ ! { "c68020", (MASK_68020|MASK_BITFIELD), "" }, \ { "68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881), \ ! N_("Generate code for a 68000") }, \ { "c68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881), \ ! N_("Generate code for a 68000") }, \ ! { "bitfield", MASK_BITFIELD, \ ! N_("Use the bit-field instructions") }, \ ! { "nobitfield", - MASK_BITFIELD, \ ! N_("Do not use the bit-field instructions") }, \ ! { "rtd", MASK_RTD, \ ! N_("Use different calling convention using 'rtd'") }, \ ! { "nortd", - MASK_RTD, \ ! N_("Use normal calling convention") }, \ ! { "short", MASK_SHORT, \ ! N_("Consider type `int' to be 16 bits wide") }, \ ! { "noshort", - MASK_SHORT, \ ! N_("Consider type `int' to be 32 bits wide") }, \ ! { "fpa", -(MASK_SKY|MASK_68040_ONLY|MASK_68881), \ ! N_("Generate code for a Sun FPA") }, \ ! { "fpa", MASK_FPA, "" }, \ ! { "nofpa", - MASK_FPA, \ ! N_("Do not generate code for a Sun FPA") }, \ ! { "sky", -(MASK_FPA|MASK_68040_ONLY|MASK_68881), \ ! N_("") }, \ ! { "sky", MASK_SKY, \ ! N_("") }, \ ! { "nosky", - MASK_SKY, \ ! N_("") }, \ ! { "68881", - (MASK_FPA|MASK_SKY), \ ! N_("Generate code for a 68881") }, \ ! { "68881", MASK_68881, "" }, \ ! { "soft-float", - (MASK_FPA|MASK_SKY|MASK_68040_ONLY|MASK_68881), \ ! N_("Generate code with library calls for floating point") }, \ ! { "68020-40", -(MASK_5200|MASK_68060|MASK_68040_ONLY), \ ! N_("Generate code for a 68040, without any new instructions") }, \ ! { "68020-40", (MASK_BITFIELD|MASK_68881|MASK_68020|MASK_68040), ""},\ ! { "68020-60", -(MASK_5200|MASK_68040_ONLY), \ ! N_("Generate code for a 68060, without any new instructions") }, \ { "68020-60", (MASK_BITFIELD|MASK_68881|MASK_68020|MASK_68040 \ ! |MASK_68060), "" }, \ ! { "68030", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY), \ ! N_("Generate code for a 68030") }, \ ! { "68030", (MASK_68020|MASK_BITFIELD), "" }, \ ! { "68040", - (MASK_5200|MASK_68060), \ ! N_("Generate code for a 68040") }, \ { "68040", (MASK_68020|MASK_68881|MASK_BITFIELD \ ! |MASK_68040_ONLY|MASK_68040), "" }, \ ! { "68060", - (MASK_5200|MASK_68040), \ ! N_("Generate code for a 68060") }, \ { "68060", (MASK_68020|MASK_68881|MASK_BITFIELD \ ! |MASK_68040_ONLY|MASK_68060), "" }, \ { "5200", - (MASK_68060|MASK_68040|MASK_68040_ONLY|MASK_68020 \ ! |MASK_BITFIELD|MASK_68881), \ ! N_("Generate code for a 520X") }, \ ! { "5200", (MASK_5200), "" }, \ ! { "68851", 0, \ ! N_("Generate code for a 68851") }, \ ! { "no-68851", 0, \ ! N_("Do no generate code for a 68851") }, \ { "68302", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881), \ ! N_("Generate code for a 68302") }, \ { "68332", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_BITFIELD|MASK_68881), \ ! N_("Generate code for a 68332") }, \ ! { "68332", MASK_68020, "" }, \ { "cpu32", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_BITFIELD|MASK_68881), \ ! N_("Generate code for a cpu32") }, \ ! { "cpu32", MASK_68020, "" }, \ ! { "align-int", MASK_ALIGN_INT, \ ! N_("Align variables on a 32-bit boundary") }, \ ! { "no-align-int", -MASK_ALIGN_INT, \ ! N_("Align variables on a 16-bit boundary") }, \ ! { "pcrel", MASK_PCREL, \ ! N_("Generate pc-relative code") }, \ ! { "strict-align", -MASK_NO_STRICT_ALIGNMENT, \ ! N_("Do not use unaligned memory references") }, \ ! { "no-strict-align", MASK_NO_STRICT_ALIGNMENT, \ ! N_("Use unaligned memory references") }, \ SUBTARGET_SWITCHES \ ! { "", TARGET_DEFAULT, "" }} /* TARGET_DEFAULT is defined in sun*.h and isi.h, etc. */ /* This macro is similar to `TARGET_SWITCHES' but defines names of *************** extern int target_flags; *** 216,224 **** option if the fixed part matches. The actual option name is made by appending `-m' to the specified name. */ #define TARGET_OPTIONS \ ! { { "align-loops=", &m68k_align_loops_string }, \ ! { "align-jumps=", &m68k_align_jumps_string }, \ ! { "align-functions=", &m68k_align_funcs_string }, \ SUBTARGET_OPTIONS \ } --- 249,260 ---- option if the fixed part matches. The actual option name is made by appending `-m' to the specified name. */ #define TARGET_OPTIONS \ ! { { "align-loops=", &m68k_align_loops_string, \ ! N_("Loop code aligned to this power of 2") }, \ ! { "align-jumps=", &m68k_align_jumps_string, \ ! N_("Jump targets are aligned to this power of 2") }, \ ! { "align-functions=", &m68k_align_funcs_string, \ ! N_("Function starts are aligned to this power of 2") }, \ SUBTARGET_OPTIONS \ } diff -Nrc3pad gcc-3.0/gcc/config/m68k/m68k.md gcc-3.0.1/gcc/config/m68k/m68k.md *** gcc-3.0/gcc/config/m68k/m68k.md Sat Jun 9 12:09:57 2001 --- gcc-3.0.1/gcc/config/m68k/m68k.md Mon Jul 30 23:18:33 2001 *************** *** 885,891 **** ;This is never used. ;(define_insn "swapsi" ! ; [(set (match_operand:SI 0 "general_operand" "+r") ; (match_operand:SI 1 "general_operand" "+r")) ; (set (match_dup 1) (match_dup 0))] ; "" --- 885,891 ---- ;This is never used. ;(define_insn "swapsi" ! ; [(set (match_operand:SI 0 "nonimmediate_operand" "+r") ; (match_operand:SI 1 "general_operand" "+r")) ; (set (match_dup 1) (match_dup 0))] ; "" *************** *** 896,902 **** ;; into a data reg with moveq in order to store it elsewhere. (define_insn "movsi_const0" ! [(set (match_operand:SI 0 "general_operand" "=g") (const_int 0))] ;; clr insns on 68000 read before writing. ;; This isn't so on the 68010, but we have no TARGET_68010. --- 896,902 ---- ;; into a data reg with moveq in order to store it elsewhere. (define_insn "movsi_const0" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (const_int 0))] ;; clr insns on 68000 read before writing. ;; This isn't so on the 68010, but we have no TARGET_68010. *************** *** 943,949 **** ;; In both the PIC and non-PIC cases the patterns generated will ;; matched by the next define_insn. (define_expand "movsi" ! [(set (match_operand:SI 0 "general_operand" "") (match_operand:SI 1 "general_operand" ""))] "" " --- 943,949 ---- ;; In both the PIC and non-PIC cases the patterns generated will ;; matched by the next define_insn. (define_expand "movsi" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (match_operand:SI 1 "general_operand" ""))] "" " *************** *** 977,983 **** ;; Notes: make sure no alternative allows g vs g. ;; We don't allow f-regs since fixed point cannot go in them. ;; We do allow y and x regs since fixed point is allowed in them. ! [(set (match_operand:SI 0 "general_operand" "=g,d,a<,y,!*x*r*m") (match_operand:SI 1 "general_src_operand" "daymSKT,n,i,g,*x*r*m"))] "!TARGET_5200" --- 977,983 ---- ;; Notes: make sure no alternative allows g vs g. ;; We don't allow f-regs since fixed point cannot go in them. ;; We do allow y and x regs since fixed point is allowed in them. ! [(set (match_operand:SI 0 "nonimmediate_operand" "=g,d,a<,y,!*x*r*m") (match_operand:SI 1 "general_src_operand" "daymSKT,n,i,g,*x*r*m"))] "!TARGET_5200" *************** *** 991,997 **** }") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=r,g") (match_operand:SI 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_simode (operands);") --- 991,997 ---- }") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=r,g") (match_operand:SI 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_simode (operands);") *************** *** 999,1005 **** ;; Special case of fullword move, where we need to get a non-GOT PIC ;; reference into an address register. (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=a<") (match_operand:SI 1 "pcrel_address" ""))] "TARGET_PCREL" "* --- 999,1005 ---- ;; Special case of fullword move, where we need to get a non-GOT PIC ;; reference into an address register. (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=a<") (match_operand:SI 1 "pcrel_address" ""))] "TARGET_PCREL" "* *************** *** 1010,1096 **** }") (define_expand "movhi" ! [(set (match_operand:HI 0 "general_operand" "") (match_operand:HI 1 "general_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:HI 0 "general_operand" "=g") (match_operand:HI 1 "general_src_operand" "gS"))] "!TARGET_5200" "* return output_move_himode (operands);") (define_insn "" ! [(set (match_operand:HI 0 "general_operand" "=r,g") (match_operand:HI 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_himode (operands);") (define_expand "movstricthi" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "")) (match_operand:HI 1 "general_src_operand" ""))] "" "") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm")) (match_operand:HI 1 "general_src_operand" "rmSn"))] "!TARGET_5200" "* return output_move_stricthi (operands);") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+d,m")) (match_operand:HI 1 "general_src_operand" "rmn,r"))] "TARGET_5200" "* return output_move_stricthi (operands);") (define_expand "movqi" ! [(set (match_operand:QI 0 "general_operand" "") (match_operand:QI 1 "general_src_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:QI 0 "general_operand" "=d,*a,m") (match_operand:QI 1 "general_src_operand" "dmSi*a,di*a,dmSi"))] "!TARGET_5200" "* return output_move_qimode (operands);") (define_insn "" ! [(set (match_operand:QI 0 "general_operand" "=d,dm,d*a") (match_operand:QI 1 "general_src_operand" "dmi,d,di*a"))] "TARGET_5200" "* return output_move_qimode (operands);") (define_expand "movstrictqi" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "")) (match_operand:QI 1 "general_src_operand" ""))] "" "") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm")) (match_operand:QI 1 "general_src_operand" "dmSn"))] "!TARGET_5200" "* return output_move_strictqi (operands);") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+d,m")) (match_operand:QI 1 "general_src_operand" "dmn,d"))] "TARGET_5200" "* return output_move_strictqi (operands);") (define_expand "movsf" ! [(set (match_operand:SF 0 "general_operand" "") (match_operand:SF 1 "general_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=rmf,x,y,rm,!x,!rm") (match_operand:SF 1 "general_operand" "rmfF,xH,rmF,y,rm,x"))] ! ; [(set (match_operand:SF 0 "general_operand" "=rmf") ; (match_operand:SF 1 "general_operand" "rmfF"))] "!TARGET_5200" "* --- 1010,1096 ---- }") (define_expand "movhi" ! [(set (match_operand:HI 0 "nonimmediate_operand" "") (match_operand:HI 1 "general_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=g") (match_operand:HI 1 "general_src_operand" "gS"))] "!TARGET_5200" "* return output_move_himode (operands);") (define_insn "" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=r,g") (match_operand:HI 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_himode (operands);") (define_expand "movstricthi" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "")) (match_operand:HI 1 "general_src_operand" ""))] "" "") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm")) (match_operand:HI 1 "general_src_operand" "rmSn"))] "!TARGET_5200" "* return output_move_stricthi (operands);") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+d,m")) (match_operand:HI 1 "general_src_operand" "rmn,r"))] "TARGET_5200" "* return output_move_stricthi (operands);") (define_expand "movqi" ! [(set (match_operand:QI 0 "nonimmediate_operand" "") (match_operand:QI 1 "general_src_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=d,*a,m") (match_operand:QI 1 "general_src_operand" "dmSi*a,di*a,dmSi"))] "!TARGET_5200" "* return output_move_qimode (operands);") (define_insn "" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=d,dm,d*a") (match_operand:QI 1 "general_src_operand" "dmi,d,di*a"))] "TARGET_5200" "* return output_move_qimode (operands);") (define_expand "movstrictqi" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "")) (match_operand:QI 1 "general_src_operand" ""))] "" "") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm")) (match_operand:QI 1 "general_src_operand" "dmSn"))] "!TARGET_5200" "* return output_move_strictqi (operands);") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+d,m")) (match_operand:QI 1 "general_src_operand" "dmn,d"))] "TARGET_5200" "* return output_move_strictqi (operands);") (define_expand "movsf" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (match_operand:SF 1 "general_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=rmf,x,y,rm,!x,!rm") (match_operand:SF 1 "general_operand" "rmfF,xH,rmF,y,rm,x"))] ! ; [(set (match_operand:SF 0 "nonimmediate_operand" "=rmf") ; (match_operand:SF 1 "general_operand" "rmfF"))] "!TARGET_5200" "* *************** *** 1170,1192 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=r,g") (match_operand:SF 1 "general_operand" "g,r"))] "TARGET_5200" "* return \"move%.l %1,%0\";") (define_expand "movdf" ! [(set (match_operand:DF 0 "general_operand" "") (match_operand:DF 1 "general_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=*rm,*rf,*rf,&*rof<>,y,*rm,x,!x,!*rm") (match_operand:DF 1 "general_operand" "*rf,m,0,*rofE<>,*rmE,y,xH,*rm,x"))] ! ; [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>") ; (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))] "!TARGET_5200" "* --- 1170,1192 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=r,g") (match_operand:SF 1 "general_operand" "g,r"))] "TARGET_5200" "* return \"move%.l %1,%0\";") (define_expand "movdf" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (match_operand:DF 1 "general_operand" ""))] "" "") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=*rm,*rf,*rf,&*rof<>,y,*rm,x,!x,!*rm") (match_operand:DF 1 "general_operand" "*rf,m,0,*rofE<>,*rmE,y,xH,*rm,x"))] ! ; [(set (match_operand:DF 0 "nonimmediate_operand" "=rm,&rf,&rof<>") ; (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))] "!TARGET_5200" "* *************** *** 1239,1245 **** }") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=r,g") (match_operand:DF 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_double (operands);") --- 1239,1245 ---- }") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=r,g") (match_operand:DF 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_double (operands);") *************** *** 1359,1365 **** (define_expand "movdi" ;; Let's see if it really still needs to handle fp regs, and, if so, why. ! [(set (match_operand:DI 0 "general_operand" "") (match_operand:DI 1 "general_operand" ""))] "" "") --- 1359,1365 ---- (define_expand "movdi" ;; Let's see if it really still needs to handle fp regs, and, if so, why. ! [(set (match_operand:DI 0 "nonimmediate_operand" "") (match_operand:DI 1 "general_operand" ""))] "" "") *************** *** 1367,1377 **** ;; movdi can apply to fp regs in some cases (define_insn "" ;; Let's see if it really still needs to handle fp regs, and, if so, why. ! [(set (match_operand:DI 0 "general_operand" "=rm,r,&ro<>,y,rm,!*x,!rm") (match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x"))] ! ; [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm") ; (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))] ! ; [(set (match_operand:DI 0 "general_operand" "=rm,&rf,&ro<>,!&rm,!&f") ; (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfF"))] "!TARGET_5200" "* --- 1367,1377 ---- ;; movdi can apply to fp regs in some cases (define_insn "" ;; Let's see if it really still needs to handle fp regs, and, if so, why. ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r,&ro<>,y,rm,!*x,!rm") (match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x"))] ! ; [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm") ; (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))] ! ; [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,&rf,&ro<>,!&rm,!&f") ; (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfF"))] "!TARGET_5200" "* *************** *** 1411,1417 **** }") (define_insn "" ! [(set (match_operand:DI 0 "general_operand" "=r,g") (match_operand:DI 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_double (operands);") --- 1411,1417 ---- }") (define_insn "" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,g") (match_operand:DI 1 "general_operand" "g,r"))] "TARGET_5200" "* return output_move_double (operands);") *************** *** 1429,1435 **** ;; truncation instructions (define_insn "truncsiqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm,d") (truncate:QI (match_operand:SI 1 "general_src_operand" "doJS,i")))] "" --- 1429,1435 ---- ;; truncation instructions (define_insn "truncsiqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm,d") (truncate:QI (match_operand:SI 1 "general_src_operand" "doJS,i")))] "" *************** *** 1448,1454 **** }") (define_insn "trunchiqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm,d") (truncate:QI (match_operand:HI 1 "general_src_operand" "doJS,i")))] "" --- 1448,1454 ---- }") (define_insn "trunchiqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm,d") (truncate:QI (match_operand:HI 1 "general_src_operand" "doJS,i")))] "" *************** *** 1476,1482 **** }") (define_insn "truncsihi2" ! [(set (match_operand:HI 0 "general_operand" "=dm,d") (truncate:HI (match_operand:SI 1 "general_src_operand" "roJS,i")))] "" --- 1476,1482 ---- }") (define_insn "truncsihi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm,d") (truncate:HI (match_operand:SI 1 "general_src_operand" "roJS,i")))] "" *************** *** 1497,1503 **** ;; zero extension instructions (define_insn "zero_extendqidi2" ! [(set (match_operand:DI 0 "general_operand" "=&d") (zero_extend:DI (match_operand:QI 1 "general_operand" "dm")))] "" "* --- 1497,1503 ---- ;; zero extension instructions (define_insn "zero_extendqidi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=&d") (zero_extend:DI (match_operand:QI 1 "general_operand" "dm")))] "" "* *************** *** 1508,1514 **** }") (define_insn "zero_extendhidi2" ! [(set (match_operand:DI 0 "general_operand" "=&d") (zero_extend:DI (match_operand:HI 1 "general_operand" "rm")))] "" "* --- 1508,1514 ---- }") (define_insn "zero_extendhidi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=&d") (zero_extend:DI (match_operand:HI 1 "general_operand" "rm")))] "" "* *************** *** 1520,1526 **** ;; this is the canonical form for (lshiftrt:DI x 32) (define_insn "zero_extendsidi2" ! [(set (match_operand:DI 0 "general_operand" "=rm") (zero_extend:DI (match_operand:SI 1 "general_operand" "rm")))] "" "* --- 1520,1526 ---- ;; this is the canonical form for (lshiftrt:DI x 32) (define_insn "zero_extendsidi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") (zero_extend:DI (match_operand:SI 1 "general_operand" "rm")))] "" "* *************** *** 1597,1603 **** ;; of this case will result in worse code than the uncombined patterns. (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=do<>,d<") (zero_extend:SI (match_operand:HI 1 "nonimmediate_src_operand" "r,mS")))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "* --- 1597,1603 ---- ;; of this case will result in worse code than the uncombined patterns. (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=do<>,d<") (zero_extend:SI (match_operand:HI 1 "nonimmediate_src_operand" "r,mS")))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "* *************** *** 1626,1632 **** }") (define_insn "" ! [(set (match_operand:HI 0 "general_operand" "=do<>,d") (zero_extend:HI (match_operand:QI 1 "nonimmediate_src_operand" "d,mS")))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "* --- 1626,1632 ---- }") (define_insn "" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=do<>,d") (zero_extend:HI (match_operand:QI 1 "nonimmediate_src_operand" "d,mS")))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "* *************** *** 1667,1673 **** }") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=do<>,d") (zero_extend:SI (match_operand:QI 1 "nonimmediate_src_operand" "d,mS")))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "* --- 1667,1673 ---- }") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=do<>,d") (zero_extend:SI (match_operand:QI 1 "nonimmediate_src_operand" "d,mS")))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "* *************** *** 1720,1726 **** ;; sign extension instructions (define_insn "extendqidi2" ! [(set (match_operand:DI 0 "general_operand" "=d") (sign_extend:DI (match_operand:QI 1 "general_src_operand" "rmS")))] "" "* --- 1720,1726 ---- ;; sign extension instructions (define_insn "extendqidi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (sign_extend:DI (match_operand:QI 1 "general_src_operand" "rmS")))] "" "* *************** *** 1734,1740 **** }") (define_insn "extendhidi2" ! [(set (match_operand:DI 0 "general_operand" "=d") (sign_extend:DI (match_operand:HI 1 "general_src_operand" "rmS")))] "" --- 1734,1740 ---- }") (define_insn "extendhidi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (sign_extend:DI (match_operand:HI 1 "general_src_operand" "rmS")))] "" *************** *** 1749,1755 **** }") (define_insn "extendsidi2" ! [(set (match_operand:DI 0 "general_operand" "=d") (sign_extend:DI (match_operand:SI 1 "general_operand" "rm")))] "" --- 1749,1755 ---- }") (define_insn "extendsidi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (sign_extend:DI (match_operand:SI 1 "general_operand" "rm")))] "" *************** *** 1796,1802 **** }") (define_insn "extendhisi2" ! [(set (match_operand:SI 0 "general_operand" "=*d,a") (sign_extend:SI (match_operand:HI 1 "nonimmediate_src_operand" "0,rmS")))] "" --- 1796,1802 ---- }") (define_insn "extendhisi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=*d,a") (sign_extend:SI (match_operand:HI 1 "nonimmediate_src_operand" "0,rmS")))] "" *************** *** 1808,1820 **** }") (define_insn "extendqihi2" ! [(set (match_operand:HI 0 "general_operand" "=d") (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0")))] "" "ext%.w %0") (define_insn "extendqisi2" ! [(set (match_operand:SI 0 "general_operand" "=d") (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0")))] "TARGET_68020 || TARGET_5200" "extb%.l %0") --- 1808,1820 ---- }") (define_insn "extendqihi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=d") (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0")))] "" "ext%.w %0") (define_insn "extendqisi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0")))] "TARGET_68020 || TARGET_5200" "extb%.l %0") *************** *** 1822,1842 **** ;; Conversions between float and double. (define_expand "extendsfdf2" ! [(set (match_operand:DF 0 "general_operand" "") (float_extend:DF (match_operand:SF 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=x,y") (float_extend:DF (match_operand:SF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpstod %w1,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=*fdm,f") (float_extend:DF (match_operand:SF 1 "general_operand" "f,dmF")))] "TARGET_68881" --- 1822,1842 ---- ;; Conversions between float and double. (define_expand "extendsfdf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (float_extend:DF (match_operand:SF 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y") (float_extend:DF (match_operand:SF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpstod %w1,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=*fdm,f") (float_extend:DF (match_operand:SF 1 "general_operand" "f,dmF")))] "TARGET_68881" *************** *** 1869,1882 **** ;; sure of truncating in that case. ;; But on the Sun FPA, we can be sure. (define_expand "truncdfsf2" ! [(set (match_operand:SF 0 "general_operand" "") (float_truncate:SF (match_operand:DF 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=x,y") (float_truncate:SF (match_operand:DF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" --- 1869,1882 ---- ;; sure of truncating in that case. ;; But on the Sun FPA, we can be sure. (define_expand "truncdfsf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (float_truncate:SF (match_operand:DF 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y") (float_truncate:SF (match_operand:DF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" *************** *** 1884,1890 **** ;; On the '040 we can truncate in a register accurately and easily. (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (float_truncate:SF (match_operand:DF 1 "general_operand" "fmG")))] "TARGET_68040_ONLY" --- 1884,1890 ---- ;; On the '040 we can truncate in a register accurately and easily. (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (float_truncate:SF (match_operand:DF 1 "general_operand" "fmG")))] "TARGET_68040_ONLY" *************** *** 1896,1902 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=dm") (float_truncate:SF (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" --- 1896,1902 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=dm") (float_truncate:SF (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" *************** *** 1911,1971 **** ;; rather than as QImode or HImode. (define_expand "floatsisf2" ! [(set (match_operand:SF 0 "general_operand" "") (float:SF (match_operand:SI 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=y,x") (float:SF (match_operand:SI 1 "general_operand" "rmi,x")))] "TARGET_FPA" "fpltos %1,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (float:SF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "f%$move%.l %1,%0") (define_expand "floatsidf2" ! [(set (match_operand:DF 0 "general_operand" "") (float:DF (match_operand:SI 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=y,x") (float:DF (match_operand:SI 1 "general_operand" "rmi,x")))] "TARGET_FPA" "fpltod %1,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (float:DF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "f%&move%.l %1,%0") (define_insn "floathisf2" ! [(set (match_operand:SF 0 "general_operand" "=f") (float:SF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "f%$move%.w %1,%0") (define_insn "floathidf2" ! [(set (match_operand:DF 0 "general_operand" "=f") (float:DF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "floatqisf2" ! [(set (match_operand:SF 0 "general_operand" "=f") (float:SF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "floatqidf2" ! [(set (match_operand:DF 0 "general_operand" "=f") (float:DF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "f%&move%.b %1,%0") --- 1911,1971 ---- ;; rather than as QImode or HImode. (define_expand "floatsisf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (float:SF (match_operand:SI 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=y,x") (float:SF (match_operand:SI 1 "general_operand" "rmi,x")))] "TARGET_FPA" "fpltos %1,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (float:SF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "f%$move%.l %1,%0") (define_expand "floatsidf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (float:DF (match_operand:SI 1 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=y,x") (float:DF (match_operand:SI 1 "general_operand" "rmi,x")))] "TARGET_FPA" "fpltod %1,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (float:DF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "f%&move%.l %1,%0") (define_insn "floathisf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (float:SF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "f%$move%.w %1,%0") (define_insn "floathidf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (float:DF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "floatqisf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (float:SF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "floatqidf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (float:DF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "f%&move%.b %1,%0") *************** *** 1976,1982 **** ;; than calling the subroutines fixsfsi or fixdfsi. (define_insn "fix_truncdfsi2" ! [(set (match_operand:SI 0 "general_operand" "=dm") (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f")))) (clobber (match_scratch:SI 2 "=d")) (clobber (match_scratch:SI 3 "=d"))] --- 1976,1982 ---- ;; than calling the subroutines fixsfsi or fixdfsi. (define_insn "fix_truncdfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm") (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f")))) (clobber (match_scratch:SI 2 "=d")) (clobber (match_scratch:SI 3 "=d"))] *************** *** 1988,1994 **** }") (define_insn "fix_truncdfhi2" ! [(set (match_operand:HI 0 "general_operand" "=dm") (fix:HI (fix:DF (match_operand:DF 1 "register_operand" "f")))) (clobber (match_scratch:SI 2 "=d")) (clobber (match_scratch:SI 3 "=d"))] --- 1988,1994 ---- }") (define_insn "fix_truncdfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm") (fix:HI (fix:DF (match_operand:DF 1 "register_operand" "f")))) (clobber (match_scratch:SI 2 "=d")) (clobber (match_scratch:SI 3 "=d"))] *************** *** 2000,2006 **** }") (define_insn "fix_truncdfqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm") (fix:QI (fix:DF (match_operand:DF 1 "register_operand" "f")))) (clobber (match_scratch:SI 2 "=d")) (clobber (match_scratch:SI 3 "=d"))] --- 2000,2006 ---- }") (define_insn "fix_truncdfqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (fix:QI (fix:DF (match_operand:DF 1 "register_operand" "f")))) (clobber (match_scratch:SI 2 "=d")) (clobber (match_scratch:SI 3 "=d"))] *************** *** 2015,2021 **** ;; This is the first stage of converting it to an integer type. (define_insn "ftruncdf2" ! [(set (match_operand:DF 0 "general_operand" "=f") (fix:DF (match_operand:DF 1 "general_operand" "fFm")))] "TARGET_68881 && !TARGET_68040" "* --- 2015,2021 ---- ;; This is the first stage of converting it to an integer type. (define_insn "ftruncdf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (fix:DF (match_operand:DF 1 "general_operand" "fFm")))] "TARGET_68881 && !TARGET_68040" "* *************** *** 2026,2032 **** }") (define_insn "ftruncsf2" ! [(set (match_operand:SF 0 "general_operand" "=f") (fix:SF (match_operand:SF 1 "general_operand" "dfFm")))] "TARGET_68881 && !TARGET_68040" "* --- 2026,2032 ---- }") (define_insn "ftruncsf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (fix:SF (match_operand:SF 1 "general_operand" "dfFm")))] "TARGET_68881 && !TARGET_68040" "* *************** *** 2039,2075 **** ;; Convert a float whose value is an integer ;; to an actual integer. Second stage of converting float to integer type. (define_insn "fixsfqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm") (fix:QI (match_operand:SF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "fixsfhi2" ! [(set (match_operand:HI 0 "general_operand" "=dm") (fix:HI (match_operand:SF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "fixsfsi2" ! [(set (match_operand:SI 0 "general_operand" "=dm") (fix:SI (match_operand:SF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.l %1,%0") (define_insn "fixdfqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm") (fix:QI (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "fixdfhi2" ! [(set (match_operand:HI 0 "general_operand" "=dm") (fix:HI (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "fixdfsi2" ! [(set (match_operand:SI 0 "general_operand" "=dm") (fix:SI (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.l %1,%0") --- 2039,2075 ---- ;; Convert a float whose value is an integer ;; to an actual integer. Second stage of converting float to integer type. (define_insn "fixsfqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (fix:QI (match_operand:SF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "fixsfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm") (fix:HI (match_operand:SF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "fixsfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm") (fix:SI (match_operand:SF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.l %1,%0") (define_insn "fixdfqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (fix:QI (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "fixdfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm") (fix:HI (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "fixdfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm") (fix:SI (match_operand:DF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.l %1,%0") *************** *** 2078,2090 **** ;; On the Sun FPA, this is done in one step. (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=x,y") (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "xH,rmF"))))] "TARGET_FPA" "fpstol %w1,%0") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=x,y") (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "xH,rmF"))))] "TARGET_FPA" "fpdtol %y1,%0") --- 2078,2090 ---- ;; On the Sun FPA, this is done in one step. (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=x,y") (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "xH,rmF"))))] "TARGET_FPA" "fpstol %w1,%0") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=x,y") (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "xH,rmF"))))] "TARGET_FPA" "fpdtol %y1,%0") *************** *** 2092,2098 **** ;; add instructions (define_insn "adddi_lshrdi_63" ! [(set (match_operand:DI 0 "general_operand" "=d") (plus:DI (lshiftrt:DI (match_operand:DI 1 "general_operand" "rm") (const_int 63)) (match_dup 1))) --- 2092,2098 ---- ;; add instructions (define_insn "adddi_lshrdi_63" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (plus:DI (lshiftrt:DI (match_operand:DI 1 "general_operand" "rm") (const_int 63)) (match_dup 1))) *************** *** 2126,2132 **** }") (define_insn "adddi_sexthishl32" ! [(set (match_operand:DI 0 "general_operand" "=o,a,*d,*d") (plus:DI (ashift:DI (sign_extend:DI (match_operand:HI 1 "general_operand" "rm,rm,rm,rm")) (const_int 32)) --- 2126,2132 ---- }") (define_insn "adddi_sexthishl32" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=o,a,*d,*d") (plus:DI (ashift:DI (sign_extend:DI (match_operand:HI 1 "general_operand" "rm,rm,rm,rm")) (const_int 32)) *************** *** 2145,2151 **** } ") (define_insn "adddi_dilshr32" ! [(set (match_operand:DI 0 "general_operand" "=d,o") ;; (plus:DI (match_operand:DI 2 "general_operand" "%0") ;; (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro") ;; (const_int 32))))] --- 2145,2151 ---- } ") (define_insn "adddi_dilshr32" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d,o") ;; (plus:DI (match_operand:DI 2 "general_operand" "%0") ;; (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro") ;; (const_int 32))))] *************** *** 2164,2170 **** } ") (define_insn "adddi_dishl32" ! [(set (match_operand:DI 0 "general_operand" "=r,o") ;; (plus:DI (match_operand:DI 2 "general_operand" "%0") ;; (ashift:DI (match_operand:DI 1 "general_operand" "ro") ;; (const_int 32))))] --- 2164,2170 ---- } ") (define_insn "adddi_dishl32" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o") ;; (plus:DI (match_operand:DI 2 "general_operand" "%0") ;; (ashift:DI (match_operand:DI 1 "general_operand" "ro") ;; (const_int 32))))] *************** *** 2183,2189 **** } ") (define_insn "adddi3" ! [(set (match_operand:DI 0 "general_operand" "=<,o<>,d,d,d") (plus:DI (match_operand:DI 1 "general_operand" "%0,0,0,0,0") (match_operand:DI 2 "general_operand" "<,d,no>,d,a"))) (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))] --- 2183,2189 ---- } ") (define_insn "adddi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=<,o<>,d,d,d") (plus:DI (match_operand:DI 1 "general_operand" "%0,0,0,0,0") (match_operand:DI 2 "general_operand" "<,d,no>,d,a"))) (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))] *************** *** 2275,2281 **** } ") (define_insn "addsi_lshrsi_31" ! [(set (match_operand:SI 0 "general_operand" "=dm") (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "rm") (const_int 31)) (match_dup 1)))] --- 2275,2281 ---- } ") (define_insn "addsi_lshrsi_31" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm") (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "rm") (const_int 31)) (match_dup 1)))] *************** *** 2308,2314 **** }") (define_expand "addsi3" ! [(set (match_operand:SI 0 "general_operand" "") (plus:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_src_operand" "")))] "" --- 2308,2314 ---- }") (define_expand "addsi3" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (plus:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_src_operand" "")))] "" *************** *** 2319,2325 **** ;; This is needed since they are not themselves reloaded, ;; so commutativity won't apply to them. (define_insn "*addsi3_internal" ! [(set (match_operand:SI 0 "general_operand" "=m,?a,?a,d,a") (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0,0") (match_operand:SI 2 "general_src_operand" "dIKLT,rJK,a,mSrIKLT,mSrIKLs")))] --- 2319,2325 ---- ;; This is needed since they are not themselves reloaded, ;; so commutativity won't apply to them. (define_insn "*addsi3_internal" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=m,?a,?a,d,a") (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0,0") (match_operand:SI 2 "general_src_operand" "dIKLT,rJK,a,mSrIKLT,mSrIKLs")))] *************** *** 2328,2341 **** "* return output_addsi3 (operands);") (define_insn "*addsi3_5200" ! [(set (match_operand:SI 0 "general_operand" "=m,?a,?a,r") (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0") (match_operand:SI 2 "general_src_operand" "d,rJK,a,mrIKLs")))] "TARGET_5200" "* return output_addsi3 (operands);") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=a") (plus:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_src_operand" "rmS"))))] --- 2328,2341 ---- "* return output_addsi3 (operands);") (define_insn "*addsi3_5200" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=m,?a,?a,r") (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0") (match_operand:SI 2 "general_src_operand" "d,rJK,a,mrIKLs")))] "TARGET_5200" "* return output_addsi3 (operands);") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=a") (plus:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_src_operand" "rmS"))))] *************** *** 2343,2349 **** "add%.w %2,%0") (define_insn "addhi3" ! [(set (match_operand:HI 0 "general_operand" "=m,r") (plus:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" --- 2343,2349 ---- "add%.w %2,%0") (define_insn "addhi3" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=m,r") (plus:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" *************** *** 2405,2411 **** ;; operand in both positions. (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (plus:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" --- 2405,2411 ---- ;; operand in both positions. (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d")) (plus:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" *************** *** 2461,2467 **** }") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (plus:HI (match_operand:HI 1 "general_src_operand" "dn,rmSn") (match_dup 0)))] "!TARGET_5200" --- 2461,2467 ---- }") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d")) (plus:HI (match_operand:HI 1 "general_src_operand" "dn,rmSn") (match_dup 0)))] "!TARGET_5200" *************** *** 2517,2523 **** }") (define_insn "addqi3" ! [(set (match_operand:QI 0 "general_operand" "=m,d") (plus:QI (match_operand:QI 1 "general_operand" "%0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" --- 2517,2523 ---- }") (define_insn "addqi3" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d") (plus:QI (match_operand:QI 1 "general_operand" "%0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" *************** *** 2543,2549 **** }") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (plus:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" --- 2543,2549 ---- }") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d")) (plus:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" *************** *** 2569,2575 **** }") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (plus:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" --- 2569,2575 ---- }") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d")) (plus:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" *************** *** 2595,2608 **** }") (define_expand "adddf3" ! [(set (match_operand:DF 0 "general_operand" "") (plus:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=x,y") (plus:DF (match_operand:DF 1 "general_operand" "%xH,y") (match_operand:DF 2 "general_operand" "xH,dmF")))] "TARGET_FPA" --- 2595,2608 ---- }") (define_expand "adddf3" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (plus:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y") (plus:DF (match_operand:DF 1 "general_operand" "%xH,y") (match_operand:DF 2 "general_operand" "xH,dmF")))] "TARGET_FPA" *************** *** 2618,2645 **** }") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (plus:DF (float:DF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&add%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (plus:DF (float:DF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&add%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (plus:DF (float:DF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&add%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (plus:DF (match_operand:DF 1 "general_operand" "%0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" --- 2618,2645 ---- }") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (plus:DF (float:DF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&add%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (plus:DF (float:DF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&add%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (plus:DF (float:DF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&add%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (plus:DF (match_operand:DF 1 "general_operand" "%0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" *************** *** 2651,2664 **** }") (define_expand "addsf3" ! [(set (match_operand:SF 0 "general_operand" "") (plus:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=x,y") (plus:SF (match_operand:SF 1 "general_operand" "%xH,y") (match_operand:SF 2 "general_operand" "xH,rmF")))] "TARGET_FPA" --- 2651,2664 ---- }") (define_expand "addsf3" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (plus:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y") (plus:SF (match_operand:SF 1 "general_operand" "%xH,y") (match_operand:SF 2 "general_operand" "xH,rmF")))] "TARGET_FPA" *************** *** 2674,2701 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (plus:SF (float:SF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" "f%$add%.l %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (plus:SF (float:SF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" "f%$add%.w %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (plus:SF (float:SF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" "f%$add%.b %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (plus:SF (match_operand:SF 1 "general_operand" "%0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" --- 2674,2701 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (plus:SF (float:SF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" "f%$add%.l %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (plus:SF (float:SF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" "f%$add%.w %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (plus:SF (float:SF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" "f%$add%.b %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (plus:SF (match_operand:SF 1 "general_operand" "%0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" *************** *** 2709,2715 **** ;; subtract instructions (define_insn "subdi_sexthishl32" ! [(set (match_operand:DI 0 "general_operand" "=o,a,*d,*d") (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0") (ashift:DI (sign_extend:DI (match_operand:HI 2 "general_operand" "rm,rm,rm,rm")) (const_int 32)))) --- 2709,2715 ---- ;; subtract instructions (define_insn "subdi_sexthishl32" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=o,a,*d,*d") (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0") (ashift:DI (sign_extend:DI (match_operand:HI 2 "general_operand" "rm,rm,rm,rm")) (const_int 32)))) *************** *** 2727,2733 **** } ") (define_insn "subdi_dishl32" ! [(set (match_operand:DI 0 "general_operand" "+ro") (minus:DI (match_dup 0) (ashift:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32))))] --- 2727,2733 ---- } ") (define_insn "subdi_dishl32" ! [(set (match_operand:DI 0 "nonimmediate_operand" "+ro") (minus:DI (match_dup 0) (ashift:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32))))] *************** *** 2743,2749 **** } ") (define_insn "subdi3" ! [(set (match_operand:DI 0 "general_operand" "=<,o<>,d,d,d") (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0,0") (match_operand:DI 2 "general_operand" "<,d,no>,d,a"))) (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))] --- 2743,2749 ---- } ") (define_insn "subdi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=<,o<>,d,d,d") (minus:DI (match_operand:DI 1 "general_operand" "0,0,0,0,0") (match_operand:DI 2 "general_operand" "<,d,no>,d,a"))) (clobber (match_scratch:SI 3 "=X,&d,&d,X,&d"))] *************** *** 2837,2850 **** } ") (define_insn "subsi3" ! [(set (match_operand:SI 0 "general_operand" "=m,d,a") (minus:SI (match_operand:SI 1 "general_operand" "0,0,0") (match_operand:SI 2 "general_src_operand" "dT,mSrT,mSrs")))] "" "sub%.l %2,%0") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=a") (minus:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_src_operand" "rmS"))))] --- 2837,2850 ---- } ") (define_insn "subsi3" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=m,d,a") (minus:SI (match_operand:SI 1 "general_operand" "0,0,0") (match_operand:SI 2 "general_src_operand" "dT,mSrT,mSrs")))] "" "sub%.l %2,%0") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=a") (minus:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_src_operand" "rmS"))))] *************** *** 2852,2893 **** "sub%.w %2,%0") (define_insn "subhi3" ! [(set (match_operand:HI 0 "general_operand" "=m,r") (minus:HI (match_operand:HI 1 "general_operand" "0,0") (match_operand:HI 2 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" "sub%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (minus:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" "sub%.w %1,%0") (define_insn "subqi3" ! [(set (match_operand:QI 0 "general_operand" "=m,d") (minus:QI (match_operand:QI 1 "general_operand" "0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "sub%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (minus:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "sub%.b %1,%0") (define_expand "subdf3" ! [(set (match_operand:DF 0 "general_operand" "") (minus:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=x,y,y") (minus:DF (match_operand:DF 1 "general_operand" "xH,y,dmF") (match_operand:DF 2 "general_operand" "xH,dmF,0")))] "TARGET_FPA" --- 2852,2893 ---- "sub%.w %2,%0") (define_insn "subhi3" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=m,r") (minus:HI (match_operand:HI 1 "general_operand" "0,0") (match_operand:HI 2 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" "sub%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d")) (minus:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,rmSn")))] "!TARGET_5200" "sub%.w %1,%0") (define_insn "subqi3" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d") (minus:QI (match_operand:QI 1 "general_operand" "0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "sub%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d")) (minus:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "sub%.b %1,%0") (define_expand "subdf3" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (minus:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y,y") (minus:DF (match_operand:DF 1 "general_operand" "xH,y,dmF") (match_operand:DF 2 "general_operand" "xH,dmF,0")))] "TARGET_FPA" *************** *** 2903,2930 **** }") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "f%&sub%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&sub%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&sub%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" --- 2903,2930 ---- }") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "f%&sub%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&sub%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&sub%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (minus:DF (match_operand:DF 1 "general_operand" "0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" *************** *** 2936,2949 **** }") (define_expand "subsf3" ! [(set (match_operand:SF 0 "general_operand" "") (minus:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=x,y,y") (minus:SF (match_operand:SF 1 "general_operand" "xH,y,rmF") (match_operand:SF 2 "general_operand" "xH,rmF,0")))] "TARGET_FPA" --- 2936,2949 ---- }") (define_expand "subsf3" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (minus:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y,y") (minus:SF (match_operand:SF 1 "general_operand" "xH,y,rmF") (match_operand:SF 2 "general_operand" "xH,rmF,0")))] "TARGET_FPA" *************** *** 2959,2986 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "f%$sub%.l %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%$sub%.w %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%$sub%.b %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" --- 2959,2986 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "f%$sub%.l %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%$sub%.w %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%$sub%.b %2,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (minus:SF (match_operand:SF 1 "general_operand" "0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" *************** *** 2994,3000 **** ;; multiply instructions (define_insn "mulhi3" ! [(set (match_operand:HI 0 "general_operand" "=d") (mult:HI (match_operand:HI 1 "general_operand" "%0") (match_operand:HI 2 "general_src_operand" "dmSn")))] "" --- 2994,3000 ---- ;; multiply instructions (define_insn "mulhi3" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=d") (mult:HI (match_operand:HI 1 "general_operand" "%0") (match_operand:HI 2 "general_src_operand" "dmSn")))] "" *************** *** 3008,3014 **** }") (define_insn "mulhisi3" ! [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (sign_extend:SI --- 3008,3014 ---- }") (define_insn "mulhisi3" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (mult:SI (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (sign_extend:SI *************** *** 3024,3030 **** }") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (match_operand:SI 2 "const_int_operand" "n")))] --- 3024,3030 ---- }") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (mult:SI (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (match_operand:SI 2 "const_int_operand" "n")))] *************** *** 3039,3052 **** }") (define_expand "mulsi3" ! [(set (match_operand:SI 0 "general_operand" "") (mult:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] "TARGET_68020 || TARGET_5200" "") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (match_operand:SI 1 "general_operand" "%0") (match_operand:SI 2 "general_src_operand" "dmSTK")))] --- 3039,3052 ---- }") (define_expand "mulsi3" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (mult:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] "TARGET_68020 || TARGET_5200" "") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (mult:SI (match_operand:SI 1 "general_operand" "%0") (match_operand:SI 2 "general_src_operand" "dmSTK")))] *************** *** 3054,3067 **** "muls%.l %2,%0") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (match_operand:SI 1 "general_operand" "%0") (match_operand:SI 2 "general_operand" "d")))] "TARGET_5200" "muls%.l %2,%0") (define_insn "umulhisi3" ! [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (zero_extend:SI --- 3054,3067 ---- "muls%.l %2,%0") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (mult:SI (match_operand:SI 1 "general_operand" "%0") (match_operand:SI 2 "general_operand" "d")))] "TARGET_5200" "muls%.l %2,%0") (define_insn "umulhisi3" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (mult:SI (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (zero_extend:SI *************** *** 3077,3083 **** }") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (match_operand:SI 2 "const_int_operand" "n")))] --- 3077,3083 ---- }") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (mult:SI (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (match_operand:SI 2 "const_int_operand" "n")))] *************** *** 3262,3275 **** "muls%.l %3,%0:%1") (define_expand "muldf3" ! [(set (match_operand:DF 0 "general_operand" "") (mult:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=x,y") (mult:DF (match_operand:DF 1 "general_operand" "%xH,y") (match_operand:DF 2 "general_operand" "xH,rmF")))] "TARGET_FPA" --- 3262,3275 ---- "muls%.l %3,%0:%1") (define_expand "muldf3" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (mult:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y") (mult:DF (match_operand:DF 1 "general_operand" "%xH,y") (match_operand:DF 2 "general_operand" "xH,rmF")))] "TARGET_FPA" *************** *** 3287,3314 **** }") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (mult:DF (float:DF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&mul%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (mult:DF (float:DF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&mul%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (mult:DF (float:DF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&mul%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (mult:DF (match_operand:DF 1 "general_operand" "%0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" --- 3287,3314 ---- }") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (mult:DF (float:DF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&mul%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (mult:DF (float:DF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&mul%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (mult:DF (float:DF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:DF 1 "general_operand" "0")))] "TARGET_68881" "f%&mul%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (mult:DF (match_operand:DF 1 "general_operand" "%0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" *************** *** 3327,3340 **** }") (define_expand "mulsf3" ! [(set (match_operand:SF 0 "general_operand" "") (mult:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=x,y") (mult:SF (match_operand:SF 1 "general_operand" "%xH,y") (match_operand:SF 2 "general_operand" "xH,rmF")))] "TARGET_FPA" --- 3327,3340 ---- }") (define_expand "mulsf3" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (mult:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y") (mult:SF (match_operand:SF 1 "general_operand" "%xH,y") (match_operand:SF 2 "general_operand" "xH,rmF")))] "TARGET_FPA" *************** *** 3352,3358 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (mult:SF (float:SF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" --- 3352,3358 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (mult:SF (float:SF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" *************** *** 3364,3370 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (mult:SF (float:SF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" --- 3364,3370 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (mult:SF (float:SF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" *************** *** 3376,3382 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (mult:SF (float:SF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" --- 3376,3382 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (mult:SF (float:SF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:SF 1 "general_operand" "0")))] "TARGET_68881" *************** *** 3388,3394 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (mult:SF (match_operand:SF 1 "general_operand" "%0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" --- 3388,3394 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (mult:SF (match_operand:SF 1 "general_operand" "%0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" *************** *** 3413,3426 **** ;; divide instructions (define_expand "divdf3" ! [(set (match_operand:DF 0 "general_operand" "") (div:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=x,y,y") (div:DF (match_operand:DF 1 "general_operand" "xH,y,rmF") (match_operand:DF 2 "general_operand" "xH,rmF,0")))] "TARGET_FPA" --- 3413,3426 ---- ;; divide instructions (define_expand "divdf3" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (div:DF (match_operand:DF 1 "general_operand" "") (match_operand:DF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y,y") (div:DF (match_operand:DF 1 "general_operand" "xH,y,rmF") (match_operand:DF 2 "general_operand" "xH,rmF,0")))] "TARGET_FPA" *************** *** 3436,3463 **** }") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "f%&div%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&div%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&div%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" --- 3436,3463 ---- }") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "f%&div%.l %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&div%.w %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (float:DF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "f%&div%.b %2,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (match_operand:DF 2 "general_operand" "fmG")))] "TARGET_68881" *************** *** 3469,3482 **** }") (define_expand "divsf3" ! [(set (match_operand:SF 0 "general_operand" "") (div:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=x,y,y") (div:SF (match_operand:SF 1 "general_operand" "xH,y,rmF") (match_operand:SF 2 "general_operand" "xH,rmF,0")))] "TARGET_FPA" --- 3469,3482 ---- }") (define_expand "divsf3" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (div:SF (match_operand:SF 1 "general_operand" "") (match_operand:SF 2 "general_operand" "")))] "TARGET_68881 || TARGET_FPA" "") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y,y") (div:SF (match_operand:SF 1 "general_operand" "xH,y,rmF") (match_operand:SF 2 "general_operand" "xH,rmF,0")))] "TARGET_FPA" *************** *** 3492,3498 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" --- 3492,3498 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" *************** *** 3504,3510 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" --- 3504,3510 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" *************** *** 3516,3522 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" --- 3516,3522 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (float:SF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" *************** *** 3528,3534 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" --- 3528,3534 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (match_operand:SF 2 "general_operand" "fdmF")))] "TARGET_68881" *************** *** 3553,3562 **** ;; Remainder instructions. (define_insn "divmodsi4" ! [(set (match_operand:SI 0 "general_operand" "=d") (div:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_src_operand" "dmSTK"))) ! (set (match_operand:SI 3 "general_operand" "=d") (mod:SI (match_dup 1) (match_dup 2)))] "TARGET_68020 && !TARGET_5200" "* --- 3553,3562 ---- ;; Remainder instructions. (define_insn "divmodsi4" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (div:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_src_operand" "dmSTK"))) ! (set (match_operand:SI 3 "nonimmediate_operand" "=d") (mod:SI (match_dup 1) (match_dup 2)))] "TARGET_68020 && !TARGET_5200" "* *************** *** 3568,3577 **** }") (define_insn "udivmodsi4" ! [(set (match_operand:SI 0 "general_operand" "=d") (udiv:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_src_operand" "dmSTK"))) ! (set (match_operand:SI 3 "general_operand" "=d") (umod:SI (match_dup 1) (match_dup 2)))] "TARGET_68020 && !TARGET_5200" "* --- 3568,3577 ---- }") (define_insn "udivmodsi4" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (udiv:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_src_operand" "dmSTK"))) ! (set (match_operand:SI 3 "nonimmediate_operand" "=d") (umod:SI (match_dup 1) (match_dup 2)))] "TARGET_68020 && !TARGET_5200" "* *************** *** 3583,3592 **** }") (define_insn "divmodhi4" ! [(set (match_operand:HI 0 "general_operand" "=d") (div:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_src_operand" "dmSKT"))) ! (set (match_operand:HI 3 "general_operand" "=d") (mod:HI (match_dup 1) (match_dup 2)))] "!TARGET_5200" "* --- 3583,3592 ---- }") (define_insn "divmodhi4" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=d") (div:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_src_operand" "dmSKT"))) ! (set (match_operand:HI 3 "nonimmediate_operand" "=d") (mod:HI (match_dup 1) (match_dup 2)))] "!TARGET_5200" "* *************** *** 3606,3615 **** }") (define_insn "udivmodhi4" ! [(set (match_operand:HI 0 "general_operand" "=d") (udiv:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_src_operand" "dmSKT"))) ! (set (match_operand:HI 3 "general_operand" "=d") (umod:HI (match_dup 1) (match_dup 2)))] "!TARGET_5200" "* --- 3606,3615 ---- }") (define_insn "udivmodhi4" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=d") (udiv:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_src_operand" "dmSKT"))) ! (set (match_operand:HI 3 "nonimmediate_operand" "=d") (umod:HI (match_dup 1) (match_dup 2)))] "!TARGET_5200" "* *************** *** 3632,3638 **** ;; "anddi3" is mainly here to help combine(). (define_insn "anddi3" ! [(set (match_operand:DI 0 "general_operand" "=o,d") (and:DI (match_operand:DI 1 "general_operand" "%0,0") (match_operand:DI 2 "general_operand" "dn,don")))] "!TARGET_5200" --- 3632,3638 ---- ;; "anddi3" is mainly here to help combine(). (define_insn "anddi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=o,d") (and:DI (match_operand:DI 1 "general_operand" "%0,0") (match_operand:DI 2 "general_operand" "dn,don")))] "!TARGET_5200" *************** *** 3726,3767 **** "and%.l %2,%0") (define_insn "andhi3" ! [(set (match_operand:HI 0 "general_operand" "=m,d") (and:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (and:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.w %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (and:HI (match_operand:HI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" "and%.w %1,%0") (define_insn "andqi3" ! [(set (match_operand:QI 0 "general_operand" "=m,d") (and:QI (match_operand:QI 1 "general_operand" "%0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (and:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.b %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (and:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" --- 3726,3767 ---- "and%.l %2,%0") (define_insn "andhi3" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=m,d") (and:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d")) (and:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.w %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d")) (and:HI (match_operand:HI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" "and%.w %1,%0") (define_insn "andqi3" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d") (and:QI (match_operand:QI 1 "general_operand" "%0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d")) (and:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "and%.b %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d")) (and:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" *************** *** 3770,3776 **** ;; inclusive-or instructions (define_insn "iordi_zext" ! [(set (match_operand:DI 0 "general_operand" "=o,d") (ior:DI (zero_extend:DI (match_operand 1 "general_operand" "dn,dmn")) (match_operand:DI 2 "general_operand" "0,0")))] "!TARGET_5200" --- 3770,3776 ---- ;; inclusive-or instructions (define_insn "iordi_zext" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=o,d") (ior:DI (zero_extend:DI (match_operand 1 "general_operand" "dn,dmn")) (match_operand:DI 2 "general_operand" "0,0")))] "!TARGET_5200" *************** *** 3796,3802 **** ;; "iordi3" is mainly here to help combine(). (define_insn "iordi3" ! [(set (match_operand:DI 0 "general_operand" "=o,d") (ior:DI (match_operand:DI 1 "general_operand" "%0,0") (match_operand:DI 2 "general_operand" "dn,don")))] "!TARGET_5200" --- 3796,3802 ---- ;; "iordi3" is mainly here to help combine(). (define_insn "iordi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=o,d") (ior:DI (match_operand:DI 1 "general_operand" "%0,0") (match_operand:DI 2 "general_operand" "dn,don")))] "!TARGET_5200" *************** *** 3866,3879 **** }") (define_expand "iorsi3" ! [(set (match_operand:SI 0 "general_operand" "") (ior:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_src_operand" "")))] "" "") (define_insn "iorsi3_internal" ! [(set (match_operand:SI 0 "general_operand" "=m,d") (ior:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_src_operand" "dKT,dmSMT")))] "! TARGET_5200" --- 3866,3879 ---- }") (define_expand "iorsi3" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (ior:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_src_operand" "")))] "" "") (define_insn "iorsi3_internal" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=m,d") (ior:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_src_operand" "dKT,dmSMT")))] "! TARGET_5200" *************** *** 3883,3931 **** }") (define_insn "iorsi3_5200" ! [(set (match_operand:SI 0 "general_operand" "=m,d") (ior:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_src_operand" "d,dmsK")))] "TARGET_5200" "or%.l %2,%0") (define_insn "iorhi3" ! [(set (match_operand:HI 0 "general_operand" "=m,d") (ior:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (ior:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.w %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (ior:HI (match_operand:HI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" "or%.w %1,%0") (define_insn "iorqi3" ! [(set (match_operand:QI 0 "general_operand" "=m,d") (ior:QI (match_operand:QI 1 "general_operand" "%0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (ior:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.b %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (ior:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" --- 3883,3931 ---- }") (define_insn "iorsi3_5200" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=m,d") (ior:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_src_operand" "d,dmsK")))] "TARGET_5200" "or%.l %2,%0") (define_insn "iorhi3" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=m,d") (ior:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d")) (ior:HI (match_dup 0) (match_operand:HI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.w %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+m,d")) (ior:HI (match_operand:HI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" "or%.w %1,%0") (define_insn "iorqi3" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=m,d") (ior:QI (match_operand:QI 1 "general_operand" "%0,0") (match_operand:QI 2 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d")) (ior:QI (match_dup 0) (match_operand:QI 1 "general_src_operand" "dn,dmSn")))] "!TARGET_5200" "or%.b %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+m,d")) (ior:QI (match_operand:QI 1 "general_src_operand" "dn,dmSn") (match_dup 0)))] "!TARGET_5200" *************** *** 3935,3941 **** ;; See also ashlsi_16, ashrsi_16 and lshrsi_16. (define_insn "iorsi_zexthi_ashl16" ! [(set (match_operand:SI 0 "general_operand" "=&d") (ior:SI (zero_extend:SI (match_operand:HI 1 "general_operand" "rmn")) (ashift:SI (match_operand:SI 2 "general_operand" "or") (const_int 16))))] --- 3935,3941 ---- ;; See also ashlsi_16, ashrsi_16 and lshrsi_16. (define_insn "iorsi_zexthi_ashl16" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=&d") (ior:SI (zero_extend:SI (match_operand:HI 1 "general_operand" "rmn")) (ashift:SI (match_operand:SI 2 "general_operand" "or") (const_int 16))))] *************** *** 3952,3958 **** }") (define_insn "iorsi_zext" ! [(set (match_operand:SI 0 "general_operand" "=o,d") (ior:SI (zero_extend:SI (match_operand 1 "general_operand" "dn,dmn")) (match_operand:SI 2 "general_operand" "0,0")))] "!TARGET_5200" --- 3952,3958 ---- }") (define_insn "iorsi_zext" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=o,d") (ior:SI (zero_extend:SI (match_operand 1 "general_operand" "dn,dmn")) (match_operand:SI 2 "general_operand" "0,0")))] "!TARGET_5200" *************** *** 3974,3980 **** ;; "xordi3" is mainly here to help combine(). (define_insn "xordi3" ! [(set (match_operand:DI 0 "general_operand" "=od") (xor:DI (match_operand:DI 1 "general_operand" "%0") (match_operand:DI 2 "general_operand" "dn")))] "!TARGET_5200" --- 3974,3980 ---- ;; "xordi3" is mainly here to help combine(). (define_insn "xordi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=od") (xor:DI (match_operand:DI 1 "general_operand" "%0") (match_operand:DI 2 "general_operand" "dn")))] "!TARGET_5200" *************** *** 4047,4060 **** }") (define_expand "xorsi3" ! [(set (match_operand:SI 0 "general_operand" "") (xor:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] "" "") (define_insn "xorsi3_internal" ! [(set (match_operand:SI 0 "general_operand" "=do,m") (xor:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_operand" "di,dKT")))] --- 4047,4060 ---- }") (define_expand "xorsi3" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (xor:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] "" "") (define_insn "xorsi3_internal" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=do,m") (xor:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_operand" "di,dKT")))] *************** *** 4065,4113 **** }") (define_insn "xorsi3_5200" ! [(set (match_operand:SI 0 "general_operand" "=dm,d") (xor:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_operand" "d,Ks")))] "TARGET_5200" "eor%.l %2,%0") (define_insn "xorhi3" ! [(set (match_operand:HI 0 "general_operand" "=dm") (xor:HI (match_operand:HI 1 "general_operand" "%0") (match_operand:HI 2 "general_operand" "dn")))] "!TARGET_5200" "eor%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm")) (xor:HI (match_dup 0) (match_operand:HI 1 "general_operand" "dn")))] "!TARGET_5200" "eor%.w %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm")) (xor:HI (match_operand:HI 1 "general_operand" "dn") (match_dup 0)))] "!TARGET_5200" "eor%.w %1,%0") (define_insn "xorqi3" ! [(set (match_operand:QI 0 "general_operand" "=dm") (xor:QI (match_operand:QI 1 "general_operand" "%0") (match_operand:QI 2 "general_operand" "dn")))] "!TARGET_5200" "eor%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm")) (xor:QI (match_dup 0) (match_operand:QI 1 "general_operand" "dn")))] "!TARGET_5200" "eor%.b %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm")) (xor:QI (match_operand:QI 1 "general_operand" "dn") (match_dup 0)))] "!TARGET_5200" --- 4065,4113 ---- }") (define_insn "xorsi3_5200" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm,d") (xor:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_operand" "d,Ks")))] "TARGET_5200" "eor%.l %2,%0") (define_insn "xorhi3" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm") (xor:HI (match_operand:HI 1 "general_operand" "%0") (match_operand:HI 2 "general_operand" "dn")))] "!TARGET_5200" "eor%.w %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm")) (xor:HI (match_dup 0) (match_operand:HI 1 "general_operand" "dn")))] "!TARGET_5200" "eor%.w %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm")) (xor:HI (match_operand:HI 1 "general_operand" "dn") (match_dup 0)))] "!TARGET_5200" "eor%.w %1,%0") (define_insn "xorqi3" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (xor:QI (match_operand:QI 1 "general_operand" "%0") (match_operand:QI 2 "general_operand" "dn")))] "!TARGET_5200" "eor%.b %2,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm")) (xor:QI (match_dup 0) (match_operand:QI 1 "general_operand" "dn")))] "!TARGET_5200" "eor%.b %1,%0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm")) (xor:QI (match_operand:QI 1 "general_operand" "dn") (match_dup 0)))] "!TARGET_5200" *************** *** 4116,4122 **** ;; negation instructions (define_expand "negdi2" ! [(set (match_operand:DI 0 "general_operand" "") (neg:DI (match_operand:DI 1 "general_operand" "")))] "" " --- 4116,4122 ---- ;; negation instructions (define_expand "negdi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") (neg:DI (match_operand:DI 1 "general_operand" "")))] "" " *************** *** 4129,4135 **** }") (define_insn "negdi2_internal" ! [(set (match_operand:DI 0 "general_operand" "=<,do,!*a") (neg:DI (match_operand:DI 1 "general_operand" "0,0,0")))] "!TARGET_5200" "* --- 4129,4135 ---- }") (define_insn "negdi2_internal" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=<,do,!*a") (neg:DI (match_operand:DI 1 "general_operand" "0,0,0")))] "!TARGET_5200" "* *************** *** 4147,4153 **** } ") (define_insn "negdi2_5200" ! [(set (match_operand:DI 0 "general_operand" "=d") (neg:DI (match_operand:DI 1 "general_operand" "0")))] "TARGET_5200" "* --- 4147,4153 ---- } ") (define_insn "negdi2_5200" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (neg:DI (match_operand:DI 1 "general_operand" "0")))] "TARGET_5200" "* *************** *** 4157,4163 **** } ") (define_expand "negsi2" ! [(set (match_operand:SI 0 "general_operand" "") (neg:SI (match_operand:SI 1 "general_operand" "")))] "" " --- 4157,4163 ---- } ") (define_expand "negsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (neg:SI (match_operand:SI 1 "general_operand" "")))] "" " *************** *** 4170,4206 **** }") (define_insn "negsi2_internal" ! [(set (match_operand:SI 0 "general_operand" "=dm") (neg:SI (match_operand:SI 1 "general_operand" "0")))] "!TARGET_5200" "neg%.l %0") (define_insn "negsi2_5200" ! [(set (match_operand:SI 0 "general_operand" "=d") (neg:SI (match_operand:SI 1 "general_operand" "0")))] "TARGET_5200" "neg%.l %0") (define_insn "neghi2" ! [(set (match_operand:HI 0 "general_operand" "=dm") (neg:HI (match_operand:HI 1 "general_operand" "0")))] "!TARGET_5200" "neg%.w %0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm")) (neg:HI (match_dup 0)))] "!TARGET_5200" "neg%.w %0") (define_insn "negqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm") (neg:QI (match_operand:QI 1 "general_operand" "0")))] "!TARGET_5200" "neg%.b %0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm")) (neg:QI (match_dup 0)))] "!TARGET_5200" "neg%.b %0") --- 4170,4206 ---- }") (define_insn "negsi2_internal" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm") (neg:SI (match_operand:SI 1 "general_operand" "0")))] "!TARGET_5200" "neg%.l %0") (define_insn "negsi2_5200" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (neg:SI (match_operand:SI 1 "general_operand" "0")))] "TARGET_5200" "neg%.l %0") (define_insn "neghi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm") (neg:HI (match_operand:HI 1 "general_operand" "0")))] "!TARGET_5200" "neg%.w %0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm")) (neg:HI (match_dup 0)))] "!TARGET_5200" "neg%.w %0") (define_insn "negqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (neg:QI (match_operand:QI 1 "general_operand" "0")))] "!TARGET_5200" "neg%.b %0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm")) (neg:QI (match_dup 0)))] "!TARGET_5200" "neg%.b %0") *************** *** 4208,4214 **** ;; If using software floating point, just flip the sign bit. (define_expand "negsf2" ! [(set (match_operand:SF 0 "general_operand" "") (neg:SF (match_operand:SF 1 "general_operand" "")))] "" " --- 4208,4214 ---- ;; If using software floating point, just flip the sign bit. (define_expand "negsf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (neg:SF (match_operand:SF 1 "general_operand" "")))] "" " *************** *** 4235,4247 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=x,y") (neg:SF (match_operand:SF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpneg%.s %w1,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f,d") (neg:SF (match_operand:SF 1 "general_operand" "fdmF,0")))] "TARGET_68881" "* --- 4235,4247 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y") (neg:SF (match_operand:SF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpneg%.s %w1,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f,d") (neg:SF (match_operand:SF 1 "general_operand" "fdmF,0")))] "TARGET_68881" "* *************** *** 4257,4263 **** }") (define_expand "negdf2" ! [(set (match_operand:DF 0 "general_operand" "") (neg:DF (match_operand:DF 1 "general_operand" "")))] "" " --- 4257,4263 ---- }") (define_expand "negdf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (neg:DF (match_operand:DF 1 "general_operand" "")))] "" " *************** *** 4291,4303 **** }") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=x,y") (neg:DF (match_operand:DF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpneg%.d %y1, %0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f,d") (neg:DF (match_operand:DF 1 "general_operand" "fmF,0")))] "TARGET_68881" "* --- 4291,4303 ---- }") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y") (neg:DF (match_operand:DF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpneg%.d %y1, %0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,d") (neg:DF (match_operand:DF 1 "general_operand" "fmF,0")))] "TARGET_68881" "* *************** *** 4315,4321 **** ;; Sqrt instruction for the 68881 (define_insn "sqrtsf2" ! [(set (match_operand:SF 0 "general_operand" "=f") (sqrt:SF (match_operand:SF 1 "general_operand" "fm")))] "TARGET_68881" "* --- 4315,4321 ---- ;; Sqrt instruction for the 68881 (define_insn "sqrtsf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (sqrt:SF (match_operand:SF 1 "general_operand" "fm")))] "TARGET_68881" "* *************** *** 4327,4333 **** }") (define_insn "sqrtdf2" ! [(set (match_operand:DF 0 "general_operand" "=f") (sqrt:DF (match_operand:DF 1 "general_operand" "fm")))] "TARGET_68881" "* --- 4327,4333 ---- }") (define_insn "sqrtdf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (sqrt:DF (match_operand:DF 1 "general_operand" "fm")))] "TARGET_68881" "* *************** *** 4342,4348 **** ;; If using software floating point, just zero the sign bit. (define_expand "abssf2" ! [(set (match_operand:SF 0 "general_operand" "") (abs:SF (match_operand:SF 1 "general_operand" "")))] "" " --- 4342,4348 ---- ;; If using software floating point, just zero the sign bit. (define_expand "abssf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "") (abs:SF (match_operand:SF 1 "general_operand" "")))] "" " *************** *** 4369,4381 **** }") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=x,y") (abs:SF (match_operand:SF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpabs%.s %y1,%0") (define_insn "" ! [(set (match_operand:SF 0 "general_operand" "=f") (abs:SF (match_operand:SF 1 "general_operand" "fdmF")))] "TARGET_68881" "* --- 4369,4381 ---- }") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x,y") (abs:SF (match_operand:SF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpabs%.s %y1,%0") (define_insn "" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (abs:SF (match_operand:SF 1 "general_operand" "fdmF")))] "TARGET_68881" "* *************** *** 4386,4392 **** }") (define_expand "absdf2" ! [(set (match_operand:DF 0 "general_operand" "") (abs:DF (match_operand:DF 1 "general_operand" "")))] "" " --- 4386,4392 ---- }") (define_expand "absdf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "") (abs:DF (match_operand:DF 1 "general_operand" "")))] "" " *************** *** 4420,4432 **** }") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=x,y") (abs:DF (match_operand:DF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpabs%.d %y1,%0") (define_insn "" ! [(set (match_operand:DF 0 "general_operand" "=f") (abs:DF (match_operand:DF 1 "general_operand" "fmF")))] "TARGET_68881" "* --- 4420,4432 ---- }") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=x,y") (abs:DF (match_operand:DF 1 "general_operand" "xH,rmF")))] "TARGET_FPA" "fpabs%.d %y1,%0") (define_insn "" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (abs:DF (match_operand:DF 1 "general_operand" "fmF")))] "TARGET_68881" "* *************** *** 4440,4446 **** ;; "one_cmpldi2" is mainly here to help combine(). (define_insn "one_cmpldi2" ! [(set (match_operand:DI 0 "general_operand" "=dm") (not:DI (match_operand:DI 1 "general_operand" "0")))] "!TARGET_5200" "* --- 4440,4446 ---- ;; "one_cmpldi2" is mainly here to help combine(). (define_insn "one_cmpldi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=dm") (not:DI (match_operand:DI 1 "general_operand" "0")))] "!TARGET_5200" "* *************** *** 4457,4463 **** }") (define_expand "one_cmplsi2" ! [(set (match_operand:SI 0 "general_operand" "") (not:SI (match_operand:SI 1 "general_operand" "")))] "" " --- 4457,4463 ---- }") (define_expand "one_cmplsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (not:SI (match_operand:SI 1 "general_operand" "")))] "" " *************** *** 4470,4506 **** }") (define_insn "one_cmplsi2_internal" ! [(set (match_operand:SI 0 "general_operand" "=dm") (not:SI (match_operand:SI 1 "general_operand" "0")))] "!TARGET_5200" "not%.l %0") (define_insn "one_cmplsi2_5200" ! [(set (match_operand:SI 0 "general_operand" "=d") (not:SI (match_operand:SI 1 "general_operand" "0")))] "TARGET_5200" "not%.l %0") (define_insn "one_cmplhi2" ! [(set (match_operand:HI 0 "general_operand" "=dm") (not:HI (match_operand:HI 1 "general_operand" "0")))] "!TARGET_5200" "not%.w %0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm")) (not:HI (match_dup 0)))] "!TARGET_5200" "not%.w %0") (define_insn "one_cmplqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm") (not:QI (match_operand:QI 1 "general_operand" "0")))] "!TARGET_5200" "not%.b %0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm")) (not:QI (match_dup 0)))] "!TARGET_5200" "not%.b %0") --- 4470,4506 ---- }") (define_insn "one_cmplsi2_internal" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm") (not:SI (match_operand:SI 1 "general_operand" "0")))] "!TARGET_5200" "not%.l %0") (define_insn "one_cmplsi2_5200" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (not:SI (match_operand:SI 1 "general_operand" "0")))] "TARGET_5200" "not%.l %0") (define_insn "one_cmplhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm") (not:HI (match_operand:HI 1 "general_operand" "0")))] "!TARGET_5200" "not%.w %0") (define_insn "" ! [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+dm")) (not:HI (match_dup 0)))] "!TARGET_5200" "not%.w %0") (define_insn "one_cmplqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (not:QI (match_operand:QI 1 "general_operand" "0")))] "!TARGET_5200" "not%.b %0") (define_insn "" ! [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+dm")) (not:QI (match_dup 0)))] "!TARGET_5200" "not%.b %0") *************** *** 4509,4515 **** ;; We don't need the shift memory by 1 bit instruction (define_insn "ashldi_extsi" ! [(set (match_operand:DI 0 "general_operand" "=ro") (ashift:DI (match_operator:DI 2 "extend_operator" [(match_operand:SI 1 "general_operand" "rm")]) --- 4509,4515 ---- ;; We don't need the shift memory by 1 bit instruction (define_insn "ashldi_extsi" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=ro") (ashift:DI (match_operator:DI 2 "extend_operator" [(match_operand:SI 1 "general_operand" "rm")]) *************** *** 4529,4535 **** } ") (define_insn "ashldi_sexthi" ! [(set (match_operand:DI 0 "general_operand" "=m,a*d") (ashift:DI (sign_extend:DI (match_operand:HI 1 "general_operand" "rm,rm")) (const_int 32))) (clobber (match_scratch:SI 2 "=a,X"))] --- 4529,4535 ---- } ") (define_insn "ashldi_sexthi" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=m,a*d") (ashift:DI (sign_extend:DI (match_operand:HI 1 "general_operand" "rm,rm")) (const_int 32))) (clobber (match_scratch:SI 2 "=a,X"))] *************** *** 4556,4562 **** } ") (define_insn "ashldi_const32" ! [(set (match_operand:DI 0 "general_operand" "=rm") (ashift:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)))] "" --- 4556,4562 ---- } ") (define_insn "ashldi_const32" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") (ashift:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)))] "" *************** *** 4583,4589 **** ;; The predicate below must be general_operand, because ashldi3 allows that (define_insn "ashldi_const" ! [(set (match_operand:DI 0 "general_operand" "=d") (ashift:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] "(!TARGET_5200 --- 4583,4589 ---- ;; The predicate below must be general_operand, because ashldi3 allows that (define_insn "ashldi_const" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (ashift:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] "(!TARGET_5200 *************** *** 4615,4621 **** } ") (define_expand "ashldi3" ! [(set (match_operand:DI 0 "general_operand" "") (ashift:DI (match_operand:DI 1 "general_operand" "") (match_operand 2 "const_int_operand" "")))] "!TARGET_5200" --- 4615,4621 ---- } ") (define_expand "ashldi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") (ashift:DI (match_operand:DI 1 "general_operand" "") (match_operand 2 "const_int_operand" "")))] "!TARGET_5200" *************** *** 4729,4735 **** }") (define_insn "subreghi1ashrdi_const32" ! [(set (match_operand:HI 0 "general_operand" "=rm") (subreg:HI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)) 1))] "" --- 4729,4735 ---- }") (define_insn "subreghi1ashrdi_const32" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=rm") (subreg:HI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)) 1))] "" *************** *** 4741,4747 **** } ") (define_insn "subregsi1ashrdi_const32" ! [(set (match_operand:SI 0 "general_operand" "=rm") (subreg:SI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)) 1))] "" --- 4741,4747 ---- } ") (define_insn "subregsi1ashrdi_const32" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (subreg:SI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)) 1))] "" *************** *** 4766,4772 **** } ") (define_insn "ashrdi_const32_mem" ! [(set (match_operand:DI 0 "general_operand" "=o,<") (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro") (const_int 32))) (clobber (match_scratch:SI 2 "=d,d"))] --- 4766,4772 ---- } ") (define_insn "ashrdi_const32_mem" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=o,<") (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro") (const_int 32))) (clobber (match_scratch:SI 2 "=d,d"))] *************** *** 4786,4792 **** ;; The predicate below must be general_operand, because ashrdi3 allows that (define_insn "ashrdi_const" ! [(set (match_operand:DI 0 "general_operand" "=d") (ashiftrt:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] "(!TARGET_5200 --- 4786,4792 ---- ;; The predicate below must be general_operand, because ashrdi3 allows that (define_insn "ashrdi_const" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (ashiftrt:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] "(!TARGET_5200 *************** *** 4826,4832 **** } ") (define_expand "ashrdi3" ! [(set (match_operand:DI 0 "general_operand" "") (ashiftrt:DI (match_operand:DI 1 "general_operand" "") (match_operand 2 "const_int_operand" "")))] "!TARGET_5200" --- 4826,4832 ---- } ") (define_expand "ashrdi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") (ashiftrt:DI (match_operand:DI 1 "general_operand" "") (match_operand 2 "const_int_operand" "")))] "!TARGET_5200" *************** *** 4895,4901 **** ;; [(set (cc0) ;; (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro") ;; (const_int 32)) 1)) ! ;; (set (match_operand:SI 1 "general_operand" "=dm") ;; (subreg:SI (lshiftrt:DI (match_dup 0) ;; (const_int 32)) 1))] ;; "" --- 4895,4901 ---- ;; [(set (cc0) ;; (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro") ;; (const_int 32)) 1)) ! ;; (set (match_operand:SI 1 "nonimmediate_operand" "=dm") ;; (subreg:SI (lshiftrt:DI (match_dup 0) ;; (const_int 32)) 1))] ;; "" *************** *** 4908,4914 **** ;; [(set (cc0) ;; (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro") ;; (const_int 32)) 0)) ! ;; (set (match_operand:DI 1 "general_operand" "=do") ;; (lshiftrt:DI (match_dup 0) ;; (const_int 32)))] ;; "" --- 4908,4914 ---- ;; [(set (cc0) ;; (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro") ;; (const_int 32)) 0)) ! ;; (set (match_operand:DI 1 "nonimmediate_operand" "=do") ;; (lshiftrt:DI (match_dup 0) ;; (const_int 32)))] ;; "" *************** *** 4922,4928 **** ;;} ") (define_insn "subreg1lshrdi_const32" ! [(set (match_operand:SI 0 "general_operand" "=rm") (subreg:SI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)) 1))] "" --- 4922,4928 ---- ;;} ") (define_insn "subreg1lshrdi_const32" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (subreg:SI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro") (const_int 32)) 1))] "" *************** *** 4932,4938 **** } ") (define_insn "lshrdi_const32" ! [(set (match_operand:DI 0 "general_operand" "=ro,<,>") (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro,ro") (const_int 32)))] "" --- 4932,4938 ---- } ") (define_insn "lshrdi_const32" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=ro,<,>") (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro,ro,ro") (const_int 32)))] "" *************** *** 4959,4965 **** ;; The predicate below must be general_operand, because lshrdi3 allows that (define_insn "lshrdi_const" ! [(set (match_operand:DI 0 "general_operand" "=d") (lshiftrt:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] "(!TARGET_5200 --- 4959,4965 ---- ;; The predicate below must be general_operand, because lshrdi3 allows that (define_insn "lshrdi_const" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=d") (lshiftrt:DI (match_operand:DI 1 "general_operand" "0") (match_operand 2 "const_int_operand" "n")))] "(!TARGET_5200 *************** *** 4994,5000 **** } ") (define_expand "lshrdi3" ! [(set (match_operand:DI 0 "general_operand" "") (lshiftrt:DI (match_operand:DI 1 "general_operand" "") (match_operand 2 "const_int_operand" "")))] "!TARGET_5200" --- 4994,5000 ---- } ") (define_expand "lshrdi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") (lshiftrt:DI (match_operand:DI 1 "general_operand" "") (match_operand 2 "const_int_operand" "")))] "!TARGET_5200" *************** *** 5328,5334 **** ; than an odd byte aligned bit field instruction. ; (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=rm") (zero_extract:SI (match_operand:QI 1 "memory_src_operand" "oS") (const_int 32) (match_operand:SI 2 "const_int_operand" "n")))] --- 5328,5334 ---- ; than an odd byte aligned bit field instruction. ; (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (zero_extract:SI (match_operand:QI 1 "memory_src_operand" "oS") (const_int 32) (match_operand:SI 2 "const_int_operand" "n")))] *************** *** 5344,5350 **** }") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=&d") (zero_extract:SI (match_operand:SI 1 "register_operand" "do") (match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 3 "const_int_operand" "n")))] --- 5344,5350 ---- }") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=&d") (zero_extract:SI (match_operand:SI 1 "register_operand" "do") (match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 3 "const_int_operand" "n")))] *************** *** 5382,5388 **** ; than an odd byte aligned bit field instruction. ; (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=rm") (sign_extract:SI (match_operand:QI 1 "memory_src_operand" "oS") (const_int 32) (match_operand:SI 2 "const_int_operand" "n")))] --- 5382,5388 ---- ; than an odd byte aligned bit field instruction. ; (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (sign_extract:SI (match_operand:QI 1 "memory_src_operand" "oS") (const_int 32) (match_operand:SI 2 "const_int_operand" "n")))] *************** *** 5398,5404 **** }") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (sign_extract:SI (match_operand:SI 1 "register_operand" "do") (match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 3 "const_int_operand" "n")))] --- 5398,5404 ---- }") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (sign_extract:SI (match_operand:SI 1 "register_operand" "do") (match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 3 "const_int_operand" "n")))] *************** *** 5428,5434 **** ;; so that its address is reloaded. (define_expand "extv" ! [(set (match_operand:SI 0 "general_operand" "") (sign_extract:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "") (match_operand:SI 3 "general_operand" "")))] --- 5428,5434 ---- ;; so that its address is reloaded. (define_expand "extv" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (sign_extract:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "") (match_operand:SI 3 "general_operand" "")))] *************** *** 5436,5442 **** "") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (sign_extract:SI (match_operand:QI 1 "memory_operand" "o") (match_operand:SI 2 "general_operand" "di") (match_operand:SI 3 "general_operand" "di")))] --- 5436,5442 ---- "") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (sign_extract:SI (match_operand:QI 1 "memory_operand" "o") (match_operand:SI 2 "general_operand" "di") (match_operand:SI 3 "general_operand" "di")))] *************** *** 5444,5450 **** "bfexts %1{%b3:%b2},%0") (define_expand "extzv" ! [(set (match_operand:SI 0 "general_operand" "") (zero_extract:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "") (match_operand:SI 3 "general_operand" "")))] --- 5444,5450 ---- "bfexts %1{%b3:%b2},%0") (define_expand "extzv" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (zero_extract:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "") (match_operand:SI 3 "general_operand" "")))] *************** *** 5452,5458 **** "") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d,d") (zero_extract:SI (match_operand:QI 1 "memory_operand" "o,d") (match_operand:SI 2 "general_operand" "di,di") (match_operand:SI 3 "general_operand" "di,di")))] --- 5452,5458 ---- "") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d") (zero_extract:SI (match_operand:QI 1 "memory_operand" "o,d") (match_operand:SI 2 "general_operand" "di,di") (match_operand:SI 3 "general_operand" "di,di")))] *************** *** 5512,5518 **** }") (define_expand "insv" ! [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "") (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")) (match_operand:SI 3 "register_operand" ""))] --- 5512,5518 ---- }") (define_expand "insv" ! [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "") (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")) (match_operand:SI 3 "register_operand" ""))] *************** *** 5531,5537 **** ;; (or at least were intended to do so). (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (sign_extract:SI (match_operand:SI 1 "register_operand" "d") (match_operand:SI 2 "general_operand" "di") (match_operand:SI 3 "general_operand" "di")))] --- 5531,5537 ---- ;; (or at least were intended to do so). (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (sign_extract:SI (match_operand:SI 1 "register_operand" "d") (match_operand:SI 2 "general_operand" "di") (match_operand:SI 3 "general_operand" "di")))] *************** *** 5539,5545 **** "bfexts %1{%b3:%b2},%0") (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=d") (zero_extract:SI (match_operand:SI 1 "register_operand" "d") (match_operand:SI 2 "general_operand" "di") (match_operand:SI 3 "general_operand" "di")))] --- 5539,5545 ---- "bfexts %1{%b3:%b2},%0") (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=d") (zero_extract:SI (match_operand:SI 1 "register_operand" "d") (match_operand:SI 2 "general_operand" "di") (match_operand:SI 3 "general_operand" "di")))] *************** *** 5654,5660 **** }") (define_insn "scc0_di" ! [(set (match_operand:QI 0 "general_operand" "=dm") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro") (const_int 0)]))] "! TARGET_5200" --- 5654,5660 ---- }") (define_insn "scc0_di" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro") (const_int 0)]))] "! TARGET_5200" *************** *** 5664,5670 **** } ") (define_insn "scc0_di_5200" ! [(set (match_operand:QI 0 "general_operand" "=d") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro") (const_int 0)]))] "TARGET_5200" --- 5664,5670 ---- } ") (define_insn "scc0_di_5200" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=d") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro") (const_int 0)]))] "TARGET_5200" *************** *** 5674,5680 **** } ") (define_insn "scc_di" ! [(set (match_operand:QI 0 "general_operand" "=dm,dm") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro,r") (match_operand:DI 3 "general_operand" "r,ro")]))] --- 5674,5680 ---- } ") (define_insn "scc_di" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm,dm") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro,r") (match_operand:DI 3 "general_operand" "r,ro")]))] *************** *** 5685,5691 **** } ") (define_insn "scc_di_5200" ! [(set (match_operand:QI 0 "general_operand" "=d,d") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro,r") (match_operand:DI 3 "general_operand" "r,ro")]))] --- 5685,5691 ---- } ") (define_insn "scc_di_5200" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d") (match_operator 1 "valid_dbcc_comparison_p" [(match_operand:DI 2 "general_operand" "ro,r") (match_operand:DI 3 "general_operand" "r,ro")]))] *************** *** 6560,6566 **** (define_insn "" [(set (pc) (if_then_else ! (ne (match_operand:HI 0 "general_operand" "+d*g") (const_int 0)) (label_ref (match_operand 1 "" "")) (pc))) --- 6560,6566 ---- (define_insn "" [(set (pc) (if_then_else ! (ne (match_operand:HI 0 "nonimmediate_operand" "+d*g") (const_int 0)) (label_ref (match_operand 1 "" "")) (pc))) *************** *** 6603,6609 **** (define_insn "" [(set (pc) (if_then_else ! (ne (match_operand:SI 0 "general_operand" "+d*g") (const_int 0)) (label_ref (match_operand 1 "" "")) (pc))) --- 6603,6609 ---- (define_insn "" [(set (pc) (if_then_else ! (ne (match_operand:SI 0 "nonimmediate_operand" "+d*g") (const_int 0)) (label_ref (match_operand 1 "" "")) (pc))) *************** *** 6649,6655 **** (define_insn "" [(set (pc) (if_then_else ! (ge (plus:HI (match_operand:HI 0 "general_operand" "+d*am") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) --- 6649,6655 ---- (define_insn "" [(set (pc) (if_then_else ! (ge (plus:HI (match_operand:HI 0 "nonimmediate_operand" "+d*am") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) *************** *** 6694,6700 **** (define_expand "decrement_and_branch_until_zero" [(parallel [(set (pc) (if_then_else ! (ge (plus:SI (match_operand:SI 0 "general_operand" "") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) --- 6694,6700 ---- (define_expand "decrement_and_branch_until_zero" [(parallel [(set (pc) (if_then_else ! (ge (plus:SI (match_operand:SI 0 "nonimmediate_operand" "") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) *************** *** 6708,6714 **** (define_insn "" [(set (pc) (if_then_else ! (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) --- 6708,6714 ---- (define_insn "" [(set (pc) (if_then_else ! (ge (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+d*am") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) *************** *** 6997,7003 **** ;; This should not be used unless the add/sub insns can't be. (define_insn "" ! [(set (match_operand:SI 0 "general_operand" "=a") (match_operand:QI 1 "address_operand" "p"))] "" "* --- 6997,7003 ---- ;; This should not be used unless the add/sub insns can't be. (define_insn "" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=a") (match_operand:QI 1 "address_operand" "p"))] "" "* *************** *** 7464,7470 **** }") (define_insn "extendsfxf2" ! [(set (match_operand:XF 0 "general_operand" "=fm,f") (float_extend:XF (match_operand:SF 1 "general_operand" "f,rmF")))] "TARGET_68881" "* --- 7464,7470 ---- }") (define_insn "extendsfxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=fm,f") (float_extend:XF (match_operand:SF 1 "general_operand" "f,rmF")))] "TARGET_68881" "* *************** *** 7496,7502 **** (define_insn "extenddfxf2" ! [(set (match_operand:XF 0 "general_operand" "=fm,f") (float_extend:XF (match_operand:DF 1 "general_operand" "f,rmE")))] "TARGET_68881" --- 7496,7502 ---- (define_insn "extenddfxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=fm,f") (float_extend:XF (match_operand:DF 1 "general_operand" "f,rmE")))] "TARGET_68881" *************** *** 7532,7538 **** }") (define_insn "truncxfdf2" ! [(set (match_operand:DF 0 "general_operand" "=m,!r") (float_truncate:DF (match_operand:XF 1 "general_operand" "f,f")))] "TARGET_68881" --- 7532,7538 ---- }") (define_insn "truncxfdf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=m,!r") (float_truncate:DF (match_operand:XF 1 "general_operand" "f,f")))] "TARGET_68881" *************** *** 7548,7579 **** }") (define_insn "truncxfsf2" ! [(set (match_operand:SF 0 "general_operand" "=dm") (float_truncate:SF (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.s %f1,%0") (define_insn "floatsixf2" ! [(set (match_operand:XF 0 "general_operand" "=f") (float:XF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "fmove%.l %1,%0") (define_insn "floathixf2" ! [(set (match_operand:XF 0 "general_operand" "=f") (float:XF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "floatqixf2" ! [(set (match_operand:XF 0 "general_operand" "=f") (float:XF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "ftruncxf2" ! [(set (match_operand:XF 0 "general_operand" "=f") (fix:XF (match_operand:XF 1 "general_operand" "fFm")))] "TARGET_68881" "* --- 7548,7579 ---- }") (define_insn "truncxfsf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=dm") (float_truncate:SF (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.s %f1,%0") (define_insn "floatsixf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (float:XF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "fmove%.l %1,%0") (define_insn "floathixf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (float:XF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "floatqixf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (float:XF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "ftruncxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (fix:XF (match_operand:XF 1 "general_operand" "fFm")))] "TARGET_68881" "* *************** *** 7584,7629 **** }") (define_insn "fixxfqi2" ! [(set (match_operand:QI 0 "general_operand" "=dm") (fix:QI (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "fixxfhi2" ! [(set (match_operand:HI 0 "general_operand" "=dm") (fix:HI (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "fixxfsi2" ! [(set (match_operand:SI 0 "general_operand" "=dm") (fix:SI (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.l %1,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (plus:XF (float:XF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fadd%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (plus:XF (float:XF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fadd%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (plus:XF (float:XF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:XF 1 "general_operand" "0")))] "TARGET_68881" "fadd%.b %2,%0") (define_insn "addxf3" ! [(set (match_operand:XF 0 "general_operand" "=f") (plus:XF (match_operand:XF 1 "nonimmediate_operand" "%0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" --- 7584,7629 ---- }") (define_insn "fixxfqi2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dm") (fix:QI (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.b %1,%0") (define_insn "fixxfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=dm") (fix:HI (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.w %1,%0") (define_insn "fixxfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=dm") (fix:SI (match_operand:XF 1 "general_operand" "f")))] "TARGET_68881" "fmove%.l %1,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (plus:XF (float:XF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fadd%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (plus:XF (float:XF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fadd%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (plus:XF (float:XF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:XF 1 "general_operand" "0")))] "TARGET_68881" "fadd%.b %2,%0") (define_insn "addxf3" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (plus:XF (match_operand:XF 1 "nonimmediate_operand" "%0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" *************** *** 7635,7662 **** }") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "fsub%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "fsub%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "fsub%.b %2,%0") (define_insn "subxf3" ! [(set (match_operand:XF 0 "general_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" --- 7635,7662 ---- }") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "fsub%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "fsub%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "fsub%.b %2,%0") (define_insn "subxf3" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" *************** *** 7668,7695 **** }") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (mult:XF (float:XF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fmul%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (mult:XF (float:XF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fmul%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (mult:XF (float:XF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fmul%.b %2,%0") (define_insn "mulxf3" ! [(set (match_operand:XF 0 "general_operand" "=f") (mult:XF (match_operand:XF 1 "nonimmediate_operand" "%0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" --- 7668,7695 ---- }") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (mult:XF (float:XF (match_operand:SI 2 "general_operand" "dmi")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fmul%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (mult:XF (float:XF (match_operand:HI 2 "general_operand" "dmn")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fmul%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (mult:XF (float:XF (match_operand:QI 2 "general_operand" "dmn")) (match_operand:XF 1 "nonimmediate_operand" "0")))] "TARGET_68881" "fmul%.b %2,%0") (define_insn "mulxf3" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (mult:XF (match_operand:XF 1 "nonimmediate_operand" "%0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" *************** *** 7701,7728 **** }") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "fdiv%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "fdiv%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "general_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "fdiv%.b %2,%0") (define_insn "divxf3" ! [(set (match_operand:XF 0 "general_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" --- 7701,7728 ---- }") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:SI 2 "general_operand" "dmi"))))] "TARGET_68881" "fdiv%.l %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:HI 2 "general_operand" "dmn"))))] "TARGET_68881" "fdiv%.w %2,%0") (define_insn "" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (float:XF (match_operand:QI 2 "general_operand" "dmn"))))] "TARGET_68881" "fdiv%.b %2,%0") (define_insn "divxf3" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (div:XF (match_operand:XF 1 "nonimmediate_operand" "0") (match_operand:XF 2 "nonimmediate_operand" "fm")))] "TARGET_68881" *************** *** 7734,7740 **** }") (define_expand "negxf2" ! [(set (match_operand:XF 0 "general_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "")))] "" " --- 7734,7740 ---- }") (define_expand "negxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "")))] "" " *************** *** 7772,7778 **** }") (define_insn "negxf2_68881" ! [(set (match_operand:XF 0 "general_operand" "=f") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))] "TARGET_68881" "* --- 7772,7778 ---- }") (define_insn "negxf2_68881" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))] "TARGET_68881" "* *************** *** 7783,7789 **** }") (define_expand "absxf2" ! [(set (match_operand:XF 0 "general_operand" "") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "")))] "" " --- 7783,7789 ---- }") (define_expand "absxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "")))] "" " *************** *** 7821,7827 **** }") (define_insn "absxf2_68881" ! [(set (match_operand:XF 0 "general_operand" "=f") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))] "TARGET_68881" "* --- 7821,7827 ---- }") (define_insn "absxf2_68881" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))] "TARGET_68881" "* *************** *** 7832,7844 **** }") (define_insn "sqrtxf2" ! [(set (match_operand:XF 0 "general_operand" "=f") (sqrt:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))] "TARGET_68881" "fsqrt%.x %1,%0") (define_insn "sinsf2" ! [(set (match_operand:SF 0 "general_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 1))] "TARGET_68881 && flag_fast_math" "* --- 7832,7844 ---- }") (define_insn "sqrtxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (sqrt:XF (match_operand:XF 1 "nonimmediate_operand" "fm")))] "TARGET_68881" "fsqrt%.x %1,%0") (define_insn "sinsf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 1))] "TARGET_68881 && flag_fast_math" "* *************** *** 7850,7856 **** }") (define_insn "sindf2" ! [(set (match_operand:DF 0 "general_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 1))] "TARGET_68881 && flag_fast_math" "* --- 7850,7856 ---- }") (define_insn "sindf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 1))] "TARGET_68881 && flag_fast_math" "* *************** *** 7862,7874 **** }") (define_insn "sinxf2" ! [(set (match_operand:XF 0 "general_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 1))] "TARGET_68881 && flag_fast_math" "fsin%.x %1,%0") (define_insn "cossf2" ! [(set (match_operand:SF 0 "general_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 2))] "TARGET_68881 && flag_fast_math" "* --- 7862,7874 ---- }") (define_insn "sinxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 1))] "TARGET_68881 && flag_fast_math" "fsin%.x %1,%0") (define_insn "cossf2" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 2))] "TARGET_68881 && flag_fast_math" "* *************** *** 7880,7886 **** }") (define_insn "cosdf2" ! [(set (match_operand:DF 0 "general_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 2))] "TARGET_68881 && flag_fast_math" "* --- 7880,7886 ---- }") (define_insn "cosdf2" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 2))] "TARGET_68881 && flag_fast_math" "* *************** *** 7892,7898 **** }") (define_insn "cosxf2" ! [(set (match_operand:XF 0 "general_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 2))] "TARGET_68881 && flag_fast_math" "fcos%.x %1,%0") --- 7892,7898 ---- }") (define_insn "cosxf2" ! [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 2))] "TARGET_68881 && flag_fast_math" "fcos%.x %1,%0") diff -Nrc3pad gcc-3.0/gcc/config/m68k/t-openbsd gcc-3.0.1/gcc/config/m68k/t-openbsd *** gcc-3.0/gcc/config/m68k/t-openbsd Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/m68k/t-openbsd Fri Jul 13 11:01:43 2001 *************** *** 0 **** --- 1,5 ---- + # gdb gets confused if pic code is linked with non pic + # We cope by building all variants of libgcc. + MULTILIB_OPTIONS = fpic/fPIC + LIBGCC = stmp-multilib + INSTALL_LIBGCC = install-multilib diff -Nrc3pad gcc-3.0/gcc/config/mips/iris5.h gcc-3.0.1/gcc/config/mips/iris5.h *** gcc-3.0/gcc/config/mips/iris5.h Thu Mar 15 10:55:59 2001 --- gcc-3.0.1/gcc/config/mips/iris5.h Tue Jul 17 05:51:31 2001 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler. Iris version 5. ! Copyright (C) 1993, 1995, 1996, 1998, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler. Iris version 5. ! Copyright (C) 1993, 1995, 1996, 1998, 2000, ! 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** do { \ *** 154,159 **** --- 155,164 ---- fputs (" .text\n", FILE); \ } while (0) + /* To get unaligned data, we have to turn off auto alignment. */ + #define UNALIGNED_SHORT_ASM_OP "\t.align 0\n\t.half\t" + #define UNALIGNED_INT_ASM_OP "\t.align 0\n\t.word\t" + /* Also do this for libcalls. */ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ mips_output_external_libcall (FILE, XSTR (FUN, 0)) *************** do { \ *** 165,167 **** --- 170,195 ---- tree name_tree = get_identifier (NAME); \ TREE_ASM_WRITTEN (name_tree) = 1; \ } while (0) + + /* This is how we tell the assembler that a symbol is weak. */ + + #define ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, VALUE) \ + do \ + { \ + ASM_GLOBALIZE_LABEL (FILE, NAME); \ + fputs ("\t.weakext\t", FILE); \ + assemble_name (FILE, NAME); \ + if (VALUE) \ + { \ + fputc (' ', FILE); \ + assemble_name (FILE, VALUE); \ + } \ + fputc ('\n', FILE); \ + } \ + while (0) + + #define ASM_WEAKEN_LABEL(FILE, NAME) ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, 0) + + /* Handle #pragma weak and #pragma pack. */ + #undef HANDLE_SYSV_PRAGMA + #define HANDLE_SYSV_PRAGMA 1 diff -Nrc3pad gcc-3.0/gcc/config/mips/iris6.h gcc-3.0.1/gcc/config/mips/iris6.h *** gcc-3.0/gcc/config/mips/iris6.h Mon Jun 11 13:29:43 2001 --- gcc-3.0.1/gcc/config/mips/iris6.h Tue Jul 17 05:51:31 2001 *************** Boston, MA 02111-1307, USA. */ *** 155,160 **** --- 155,162 ---- #undef ASM_OUTPUT_UNDEF_FUNCTION #undef ASM_OUTPUT_EXTERNAL_LIBCALL #undef ASM_DECLARE_FUNCTION_SIZE + #undef UNALIGNED_SHORT_ASM_OP + #undef UNALIGNED_INT_ASM_OP /* Stuff we need for Irix 6 that isn't in Irix 5. */ *************** Boston, MA 02111-1307, USA. */ *** 204,226 **** #define TYPE_ASM_OP "\t.type\t" #define SIZE_ASM_OP "\t.size\t" - - /* This is how we tell the assembler that a symbol is weak. */ - - #define ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,VALUE) \ - do { \ - ASM_GLOBALIZE_LABEL (FILE, NAME); \ - fputs ("\t.weakext\t", FILE); \ - assemble_name (FILE, NAME); \ - if (VALUE) \ - { \ - fputc (' ', FILE); \ - assemble_name (FILE, VALUE); \ - } \ - fputc ('\n', FILE); \ - } while (0) - - #define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0) /* Irix assembler does not support the init_priority C++ attribute. */ #undef SUPPORTS_INIT_PRIORITY --- 206,211 ---- diff -Nrc3pad gcc-3.0/gcc/config/mips/irix6-libc-compat.c gcc-3.0.1/gcc/config/mips/irix6-libc-compat.c *** gcc-3.0/gcc/config/mips/irix6-libc-compat.c Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/mips/irix6-libc-compat.c Tue Jul 24 05:06:17 2001 *************** *** 0 **** --- 1,140 ---- + /* Compensate for inconsistent structure passing conventions on IRIX 6. */ + /* Compile this one with gcc. */ + /* Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC 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 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* GCC doesn't correctly implement the structure and union passing and return + conventions of the N32 and N64 ABIs on IRIX 6, as described in the + MIPSpro N32 ABI Handbook, ch. 2, Calling Convention Implementations, p.7. + The ABI requires that structures (or trailing parts of structures) smaller + than 8 bytes (a 64-bit register) are left-justified, whereas GCC + right-justifies them. + + While GCC is internally consistent, calling routines compiled with a + compiler that does implement the documented ABI (like SGIs MIPSpro C + compiler) doesn't work. This is primarily an issue for system libraries + like libc. Fortunately, there exist only very few routines that take + structure value arguments or return structures by value, so until the + underlying bug is fixed, it is possible to work around it by providing + wrapper functions for the few affected routines that compensate for the + inconsistent alignment. + + These wrappers rely on the fact that e.g. libc contains weak versions of + those routines, and the real implementation is provided by _-prefixed + variants. So we can provide our own versions, which will only be linked + if the application uses any of the affected functions, calling the private + variants after shifting the arguments or results as required. + + This is a rewrite of code created by Andy Polyakov. */ + + #include "config.h" + #include "system.h" + + /* This must only be used for the N32 and N64 ABIs. O32 is correct. */ + + #if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 + + /* The affected arguments need to be shifted by + + BITS_PER_WORD - (sizeof (arg) * BITS_PER_UNIT). + + Since only 32-bit args and results are involved, the shift count is + always 32. */ + #define SHIFT_BITS 32 + + extern machreg_t _inet_ntoa PARAMS ((machreg_t)); + extern machreg_t _inet_lnaof PARAMS ((machreg_t)); + extern machreg_t _inet_netof PARAMS ((machreg_t)); + extern machreg_t _inet_makeaddr PARAMS ((machreg_t, machreg_t)); + + /* has + + char *inet_ntoa (struct in_addr); + + on both IRIX 6.2 and 6.5, with struct in_addr containing a 32-bit int. */ + + machreg_t + inet_ntoa (machreg_t in) + { + return _inet_ntoa (in << SHIFT_BITS); + } + + /* has + + unsigned long inet_lnaof (struct in_addr); (IRIX 6.2) + in_addr_t inet_lnaof (struct in_addr); (IRIX 6.5) + + in_addr_t is a 32-bit int. */ + + machreg_t + inet_lnaof (machreg_t in) + { + return _inet_lnaof (in << SHIFT_BITS); + } + + /* has + + unsigned long inet_netof (struct in_addr); (IRIX 6.2) + in_addr_t inet_netof (struct in_addr); (IRIX 6.5) */ + + machreg_t + inet_netof (machreg_t in) + { + return _inet_netof (in << SHIFT_BITS); + } + + /* has + + struct in_addr inet_makeaddr (int, int); (IRIX 6.2) + struct in_addr inet_makeaddr (in_addr_t, in_addr_t); (IRIX 6.5) */ + + machreg_t + inet_makeaddr (machreg_t net, machreg_t lna) + { + return _inet_makeaddr (net, lna) >> SHIFT_BITS; + } + + #if _MIPS_SIM == _ABIN32 + extern machreg_t _semctl PARAMS ((machreg_t, machreg_t, machreg_t, machreg_t)); + + /* has + + int semctl (int, int, int, ...); + + where the variadic argument is union semun if used. union semun contains + an int and two pointers, so the union is already 64 bits wide under the + N64 ABI and alignment is not an issue. */ + + machreg_t + semctl (machreg_t semid, machreg_t semnum, machreg_t cmd, machreg_t arg) + { + return _semctl(semid, semnum, cmd, arg << SHIFT_BITS); + } + #endif /* _ABIN32 */ + + #endif /* _ABIN32 || _ABI64 */ diff -Nrc3pad gcc-3.0/gcc/config/mips/linux.h gcc-3.0.1/gcc/config/mips/linux.h *** gcc-3.0/gcc/config/mips/linux.h Thu Apr 26 09:04:14 2001 --- gcc-3.0.1/gcc/config/mips/linux.h Wed Aug 1 10:22:35 2001 *************** Boston, MA 02111-1307, USA. */ *** 109,114 **** --- 109,121 ---- %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \ %{pthread:-D_REENTRANT}" + /* The GNU C++ standard library requires that these macros be defined. */ + #undef CPLUSPLUS_CPP_SPEC + #define CPLUSPLUS_CPP_SPEC "\ + -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS \ + -D_GNU_SOURCE %(cpp) \ + " + /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add the GNU/Linux magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static *************** Boston, MA 02111-1307, USA. */ *** 174,179 **** --- 181,202 ---- #undef SET_ASM_OP #define SET_ASM_OP "\t.dummy\t" + #undef ASM_OUTPUT_SOURCE_LINE + #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ + do \ + { \ + static int sym_lineno = 1; \ + fprintf (FILE, "%sLM%d:\n\t%s 68,0,%d,%sLM%d", \ + LOCAL_LABEL_PREFIX, sym_lineno, ASM_STABN_OP, \ + LINE, LOCAL_LABEL_PREFIX, sym_lineno); \ + putc ('-', FILE); \ + assemble_name (FILE, \ + XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ + putc ('\n', FILE); \ + sym_lineno++; \ + } \ + while (0) + /* This is how we tell the assembler that two symbols have the same value. */ #undef ASM_OUTPUT_DEF *************** Boston, MA 02111-1307, USA. */ *** 196,198 **** --- 219,259 ---- fputc ('-', FILE); \ assemble_name (FILE, LO); \ } while (0) + + #undef ASM_DECLARE_FUNCTION_NAME + #define ASM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \ + do { \ + if (!flag_inhibit_size_directive) \ + { \ + fputs ("\t.ent\t", STREAM); \ + assemble_name (STREAM, NAME); \ + putc ('\n', STREAM); \ + } \ + fprintf (STREAM, "\t%s\t ", TYPE_ASM_OP); \ + assemble_name (STREAM, NAME); \ + putc (',', STREAM); \ + fprintf (STREAM, TYPE_OPERAND_FMT, "function"); \ + putc ('\n', STREAM); \ + assemble_name (STREAM, NAME); \ + fputs (":\n", STREAM); \ + } while (0) + + #undef ASM_DECLARE_FUNCTION_SIZE + #define ASM_DECLARE_FUNCTION_SIZE(STREAM, NAME, DECL) \ + do { \ + if (!flag_inhibit_size_directive) \ + { \ + fputs ("\t.end\t", STREAM); \ + assemble_name (STREAM, NAME); \ + putc ('\n', STREAM); \ + } \ + } while (0) + + /* Tell function_prologue in mips.c that we have already output the .ent/.end + pseudo-ops. */ + #define FUNCTION_NAME_ALREADY_DECLARED + + /* Output #ident as a .ident. */ + #undef ASM_OUTPUT_IDENT + #define ASM_OUTPUT_IDENT(FILE, NAME) \ + fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME); diff -Nrc3pad gcc-3.0/gcc/config/mips/t-iris6 gcc-3.0.1/gcc/config/mips/t-iris6 *** gcc-3.0/gcc/config/mips/t-iris6 Tue Jun 12 22:05:41 2001 --- gcc-3.0.1/gcc/config/mips/t-iris6 Tue Jul 24 05:06:17 2001 *************** fp-bit.c: $(srcdir)/config/fp-bit.c *** 53,55 **** --- 53,59 ---- echo '#define FLOAT' > fp-bit.c echo '#undef US_SOFTWARE_GOFAST' >> fp-bit.c cat $(srcdir)/config/fp-bit.c >> fp-bit.c + + # This is only needed in the static libgcc as a band-aid until gcc correctly + # implements the N32/N64 ABI structure passing conventions + LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/mips/irix6-libc-compat.c diff -Nrc3pad gcc-3.0/gcc/config/mn10200/t-mn10200 gcc-3.0.1/gcc/config/mn10200/t-mn10200 *** gcc-3.0/gcc/config/mn10200/t-mn10200 Thu Nov 30 00:25:59 2000 --- gcc-3.0.1/gcc/config/mn10200/t-mn10200 Mon Jul 9 15:03:17 2001 *************** LIB1ASMFUNCS = _divhi3 \ *** 28,34 **** _prologue \ _epilogue_a0 \ _epilogue_d0 \ ! _epilogue_noreturn # We do not have DF or DI types, so fake out the libgcc2 compilation. --- 28,36 ---- _prologue \ _epilogue_a0 \ _epilogue_d0 \ ! _epilogue_noreturn \ ! _floatdisf \ ! _fixsfdi # We do not have DF or DI types, so fake out the libgcc2 compilation. diff -Nrc3pad gcc-3.0/gcc/config/openbsd.h gcc-3.0.1/gcc/config/openbsd.h *** gcc-3.0/gcc/config/openbsd.h Mon Sep 25 04:45:51 2000 --- gcc-3.0.1/gcc/config/openbsd.h Fri Jul 13 11:01:42 2001 *************** Boston, MA 02111-1307, USA. */ *** 78,89 **** since all code must be compiled with -pthread to work. This two-stage defines makes it easy to pick that for targets that have subspecs. */ #define OBSD_CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" /* LIB_SPEC appropriate for OpenBSD. Select the appropriate libc, depending on profiling and threads. Basically, -lc(_r)?(_p)?, select _r for threads, and _p for p or pg. */ ! #define OBSD_LIB_SPEC "-lc%{pthread:_r}%{p:_p}%{!p:%{pg:_p}}" #ifndef OBSD_HAS_CORRECT_SPECS --- 78,93 ---- since all code must be compiled with -pthread to work. This two-stage defines makes it easy to pick that for targets that have subspecs. */ + #ifdef CPP_CPU_SPEC + #define OBSD_CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" + #else #define OBSD_CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" + #endif /* LIB_SPEC appropriate for OpenBSD. Select the appropriate libc, depending on profiling and threads. Basically, -lc(_r)?(_p)?, select _r for threads, and _p for p or pg. */ ! #define OBSD_LIB_SPEC "%{!shared:-lc%{pthread:_r}%{p:_p}%{!p:%{pg:_p}}}" #ifndef OBSD_HAS_CORRECT_SPECS *************** Boston, MA 02111-1307, USA. */ *** 103,108 **** --- 107,113 ---- pic code. */ #undef ASM_SPEC #define ASM_SPEC "%{fpic:-k} %{fPIC:-k -K} %|" + #else /* Since we use gas, stdin -> - is a good idea, but we don't want to override native specs just for that. */ *************** Boston, MA 02111-1307, USA. */ *** 116,125 **** #undef LINK_SPEC #ifdef OBSD_NO_DYNAMIC_LIBRARIES #define LINK_SPEC \ ! "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{assert*}" #else #define LINK_SPEC \ ! "%{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}}} %{shared:-Bshareable -x} -dc -dp %{R*} %{static:-Bstatic} %{assert*}" #endif #undef LIB_SPEC --- 121,130 ---- #undef LINK_SPEC #ifdef OBSD_NO_DYNAMIC_LIBRARIES #define LINK_SPEC \ ! "%{g:%{!nostdlib:-L/usr/lib/debug}} %{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{assert*}" #else #define LINK_SPEC \ ! "%{g:%{!nostdlib:-L/usr/lib/debug}} %{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}}} %{shared:-Bshareable -x} -dc -dp %{R*} %{static:-Bstatic} %{assert*}" #endif #undef LIB_SPEC diff -Nrc3pad gcc-3.0/gcc/config/rs6000/rs6000-protos.h gcc-3.0.1/gcc/config/rs6000/rs6000-protos.h *** gcc-3.0/gcc/config/rs6000/rs6000-protos.h Fri May 18 12:34:18 2001 --- gcc-3.0.1/gcc/config/rs6000/rs6000-protos.h Sat Jul 14 15:50:31 2001 *************** extern int reg_or_neg_short_operand PARA *** 42,52 **** --- 42,55 ---- extern int reg_or_u_short_operand PARAMS ((rtx, enum machine_mode)); extern int reg_or_cint_operand PARAMS ((rtx, enum machine_mode)); extern int reg_or_arith_cint_operand PARAMS ((rtx, enum machine_mode)); + extern int reg_or_add_cint64_operand PARAMS ((rtx, enum machine_mode)); + extern int reg_or_sub_cint64_operand PARAMS ((rtx, enum machine_mode)); extern int reg_or_logical_cint_operand PARAMS ((rtx, enum machine_mode)); extern int got_operand PARAMS ((rtx, enum machine_mode)); extern int got_no_const_operand PARAMS ((rtx, enum machine_mode)); extern int num_insns_constant PARAMS ((rtx, enum machine_mode)); extern int easy_fp_constant PARAMS ((rtx, enum machine_mode)); + extern int zero_fp_constant PARAMS ((rtx, enum machine_mode)); extern int volatile_mem_operand PARAMS ((rtx, enum machine_mode)); extern int offsettable_mem_operand PARAMS ((rtx, enum machine_mode)); extern int mem_or_easy_const_operand PARAMS ((rtx, enum machine_mode)); *************** extern int scc_comparison_operator PARAM *** 79,84 **** --- 82,88 ---- extern int trap_comparison_operator PARAMS ((rtx, enum machine_mode)); extern int boolean_operator PARAMS ((rtx, enum machine_mode)); extern int boolean_or_operator PARAMS ((rtx, enum machine_mode)); + extern int min_max_operator PARAMS ((rtx, enum machine_mode)); extern int includes_lshift_p PARAMS ((rtx, rtx)); extern int includes_rshift_p PARAMS ((rtx, rtx)); extern int includes_lshift64_p PARAMS ((rtx, rtx)); *************** extern enum rtx_code rs6000_reverse_cond *** 94,99 **** --- 98,105 ---- extern void rs6000_emit_sCOND PARAMS ((enum rtx_code, rtx)); extern void rs6000_emit_cbranch PARAMS ((enum rtx_code, rtx)); extern char * output_cbranch PARAMS ((rtx, const char *, int, rtx)); + extern int rs6000_emit_cmove PARAMS ((rtx, rtx, rtx, rtx)); + extern void rs6000_emit_minmax PARAMS ((rtx, enum rtx_code, rtx, rtx)); extern void output_toc PARAMS ((FILE *, rtx, int, enum machine_mode)); extern int rs6000_adjust_cost PARAMS ((rtx, rtx, rtx, int)); extern int rs6000_adjust_priority PARAMS ((rtx, int)); diff -Nrc3pad gcc-3.0/gcc/config/rs6000/rs6000.c gcc-3.0.1/gcc/config/rs6000/rs6000.c *** gcc-3.0/gcc/config/rs6000/rs6000.c Fri May 18 12:15:11 2001 --- gcc-3.0.1/gcc/config/rs6000/rs6000.c Sat Jul 14 15:50:30 2001 *************** reg_or_arith_cint_operand (op, mode) *** 674,680 **** || (GET_CODE (op) == CONST_INT #if HOST_BITS_PER_WIDE_INT != 32 && ((unsigned HOST_WIDE_INT) (INTVAL (op) + 0x80000000) ! < 0x100000000u) #endif )); } --- 674,716 ---- || (GET_CODE (op) == CONST_INT #if HOST_BITS_PER_WIDE_INT != 32 && ((unsigned HOST_WIDE_INT) (INTVAL (op) + 0x80000000) ! < 0x100000000ll) ! #endif ! )); ! } ! ! /* Return 1 is the operand is either a non-special register or a 32-bit ! signed constant integer valid for 64-bit addition. */ ! ! int ! reg_or_add_cint64_operand (op, mode) ! register rtx op; ! enum machine_mode mode; ! { ! return (gpc_reg_operand (op, mode) ! || (GET_CODE (op) == CONST_INT ! && INTVAL (op) < 0x7fff8000 ! #if HOST_BITS_PER_WIDE_INT != 32 ! && ((unsigned HOST_WIDE_INT) (INTVAL (op) + 0x80008000) ! < 0x100000000ll) ! #endif ! )); ! } ! ! /* Return 1 is the operand is either a non-special register or a 32-bit ! signed constant integer valid for 64-bit subtraction. */ ! ! int ! reg_or_sub_cint64_operand (op, mode) ! register rtx op; ! enum machine_mode mode; ! { ! return (gpc_reg_operand (op, mode) ! || (GET_CODE (op) == CONST_INT ! && (- INTVAL (op)) < 0x7fff8000 ! #if HOST_BITS_PER_WIDE_INT != 32 ! && ((unsigned HOST_WIDE_INT) ((- INTVAL (op)) + 0x80008000) ! < 0x100000000ll) #endif )); } *************** easy_fp_constant (op, mode) *** 905,910 **** --- 941,955 ---- abort (); } + /* Return 1 if the operand is 0.0. */ + int + zero_fp_constant (op, mode) + register rtx op; + register enum machine_mode mode; + { + return GET_MODE_CLASS (mode) == MODE_FLOAT && op == CONST0_RTX (mode); + } + /* Return 1 if the operand is in volatile memory. Note that during the RTL generation phase, memory_operand does not return TRUE for volatile memory references. So this function allows us to *************** add_operand (op, mode) *** 964,972 **** register rtx op; enum machine_mode mode; { ! return (reg_or_short_operand (op, mode) ! || (GET_CODE (op) == CONST_INT ! && CONST_OK_FOR_LETTER_P (INTVAL(op), 'L'))); } /* Return 1 if OP is a constant but not a valid add_operand. */ --- 1009,1019 ---- register rtx op; enum machine_mode mode; { ! if (GET_CODE (op) == CONST_INT) ! return (CONST_OK_FOR_LETTER_P (INTVAL(op), 'I') ! || CONST_OK_FOR_LETTER_P (INTVAL(op), 'L')); ! ! return gpc_reg_operand (op, mode); } /* Return 1 if OP is a constant but not a valid add_operand. */ *************** boolean_or_operator (op, mode) *** 3394,3399 **** --- 3441,3455 ---- enum rtx_code code = GET_CODE (op); return (code == IOR || code == XOR); } + + int + min_max_operator (op, mode) + rtx op; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + enum rtx_code code = GET_CODE (op); + return (code == SMIN || code == SMAX || code == UMIN || code == UMAX); + } /* Return 1 if ANDOP is a mask that has no bits on that are not in the mask required to convert the result of a rotate insn into a shift *************** print_operand (file, x, code) *** 4028,4033 **** --- 4084,4090 ---- case 'p': /* X is a CONST_INT that is a power of two. Output the logarithm. */ if (! INT_P (x) + || INT_LOWPART (x) < 0 || (i = exact_log2 (INT_LOWPART (x))) < 0) output_operand_lossage ("invalid %%p value"); else *************** output_cbranch (op, label, reversed, ins *** 4624,4635 **** { /* Not all of these are actually distinct opcodes, but we distinguish them for clarity of the resulting assembler. */ ! case NE: ccode = "ne"; break; ! case EQ: ccode = "eq"; break; ! case GE: case GEU: ccode = "ge"; break; ! case GT: case GTU: ccode = "gt"; break; ! case LE: case LEU: ccode = "le"; break; ! case LT: case LTU: ccode = "lt"; break; case UNORDERED: ccode = "un"; break; case ORDERED: ccode = "nu"; break; case UNGE: ccode = "nl"; break; --- 4681,4698 ---- { /* Not all of these are actually distinct opcodes, but we distinguish them for clarity of the resulting assembler. */ ! case NE: case LTGT: ! ccode = "ne"; break; ! case EQ: case UNEQ: ! ccode = "eq"; break; ! case GE: case GEU: ! ccode = "ge"; break; ! case GT: case GTU: case UNGT: ! ccode = "gt"; break; ! case LE: case LEU: ! ccode = "le"; break; ! case LT: case LTU: case UNLT: ! ccode = "lt"; break; case UNORDERED: ccode = "un"; break; case ORDERED: ccode = "nu"; break; case UNGE: ccode = "nl"; break; *************** output_cbranch (op, label, reversed, ins *** 4678,4683 **** --- 4741,4921 ---- } return string; + } + + /* Emit a conditional move: move TRUE_COND to DEST if OP of the + operands of the last comparison is nonzero/true, FALSE_COND if it + is zero/false. Return 0 if the hardware has no such operation. */ + int + rs6000_emit_cmove (dest, op, true_cond, false_cond) + rtx dest; + rtx op; + rtx true_cond; + rtx false_cond; + { + enum rtx_code code = GET_CODE (op); + rtx op0 = rs6000_compare_op0; + rtx op1 = rs6000_compare_op1; + REAL_VALUE_TYPE c1; + enum machine_mode mode = GET_MODE (op0); + rtx temp; + + /* First, work out if the hardware can do this at all, or + if it's too slow... */ + /* If the comparison is an integer one, since we only have fsel + it'll be cheaper to use a branch. */ + if (! rs6000_compare_fp_p) + return 0; + + /* Eliminate half of the comparisons by switching operands, this + makes the remaining code simpler. */ + if (code == UNLT || code == UNGT || code == UNORDERED || code == NE + || code == LTGT || code == LT) + { + code = reverse_condition_maybe_unordered (code); + temp = true_cond; + true_cond = false_cond; + false_cond = temp; + } + + /* UNEQ and LTGT take four instructions for a comparison with zero, + it'll probably be faster to use a branch here too. */ + if (code == UNEQ) + return 0; + + if (GET_CODE (op1) == CONST_DOUBLE) + REAL_VALUE_FROM_CONST_DOUBLE (c1, op1); + + /* We're going to try to implement comparions by performing + a subtract, then comparing against zero. Unfortunately, + Inf - Inf is NaN which is not zero, and so if we don't + know that the the operand is finite and the comparison + would treat EQ different to UNORDERED, we can't do it. */ + if (! flag_fast_math + && code != GT && code != UNGE + && (GET_CODE (op1) != CONST_DOUBLE || target_isinf (c1)) + /* Constructs of the form (a OP b ? a : b) are safe. */ + && ((! rtx_equal_p (op0, false_cond) && ! rtx_equal_p (op1, false_cond)) + || (! rtx_equal_p (op0, true_cond) + && ! rtx_equal_p (op1, true_cond)))) + return 0; + /* At this point we know we can use fsel. */ + + /* Reduce the comparison to a comparison against zero. */ + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, + gen_rtx_MINUS (mode, op0, op1))); + op0 = temp; + op1 = CONST0_RTX (mode); + + /* If we don't care about NaNs we can reduce some of the comparisons + down to faster ones. */ + if (flag_fast_math) + switch (code) + { + case GT: + code = LE; + temp = true_cond; + true_cond = false_cond; + false_cond = temp; + break; + case UNGE: + code = GE; + break; + case UNEQ: + code = EQ; + break; + default: + break; + } + + /* Now, reduce everything down to a GE. */ + switch (code) + { + case GE: + break; + + case LE: + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, gen_rtx_NEG (mode, op0))); + op0 = temp; + break; + + case ORDERED: + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, gen_rtx_ABS (mode, op0))); + op0 = temp; + break; + + case EQ: + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, + gen_rtx_NEG (mode, + gen_rtx_ABS (mode, op0)))); + op0 = temp; + break; + + case UNGE: + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, + gen_rtx_IF_THEN_ELSE (mode, + gen_rtx_GE (VOIDmode, + op0, op1), + true_cond, false_cond))); + false_cond = temp; + true_cond = false_cond; + + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, gen_rtx_NEG (mode, op0))); + op0 = temp; + break; + + case GT: + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, + gen_rtx_IF_THEN_ELSE (mode, + gen_rtx_GE (VOIDmode, + op0, op1), + true_cond, false_cond))); + true_cond = temp; + false_cond = true_cond; + + temp = gen_reg_rtx (mode); + emit_insn (gen_rtx_SET (VOIDmode, temp, gen_rtx_NEG (mode, op0))); + op0 = temp; + break; + + default: + abort (); + } + + emit_insn (gen_rtx_SET (VOIDmode, dest, + gen_rtx_IF_THEN_ELSE (mode, + gen_rtx_GE (VOIDmode, + op0, op1), + true_cond, false_cond))); + return 1; + } + + void + rs6000_emit_minmax (dest, code, op0, op1) + rtx dest; + enum rtx_code code; + rtx op0; + rtx op1; + { + enum machine_mode mode = GET_MODE (op0); + rtx target; + if (code == SMAX || code == UMAX) + target = emit_conditional_move (dest, GE, op0, op1, mode, + op0, op1, mode, 0); + else + target = emit_conditional_move (dest, GE, op0, op1, mode, + op1, op0, mode, 0); + if (target == NULL_RTX) + abort (); + if (target != dest) + emit_move_insn (dest, target); } /* This page contains routines that are used to determine what the function diff -Nrc3pad gcc-3.0/gcc/config/rs6000/rs6000.h gcc-3.0.1/gcc/config/rs6000/rs6000.h *** gcc-3.0/gcc/config/rs6000/rs6000.h Thu May 17 16:31:19 2001 --- gcc-3.0.1/gcc/config/rs6000/rs6000.h Sat Jul 14 15:50:30 2001 *************** enum reg_class *** 1044,1050 **** `K' is a constant with only the low-order 16 bits non-zero `L' is a signed 16-bit constant shifted left 16 bits `M' is a constant that is greater than 31 ! `N' is a constant that is an exact power of two `O' is the constant zero `P' is a constant whose negation is a signed 16-bit constant */ --- 1044,1050 ---- `K' is a constant with only the low-order 16 bits non-zero `L' is a signed 16-bit constant shifted left 16 bits `M' is a constant that is greater than 31 ! `N' is a positive constant that is an exact power of two `O' is the constant zero `P' is a constant whose negation is a signed 16-bit constant */ *************** enum reg_class *** 1055,1061 **** : (C) == 'L' ? (((VALUE) & 0xffff) == 0 \ && ((VALUE) >> 31 == -1 || (VALUE) >> 31 == 0)) \ : (C) == 'M' ? (VALUE) > 31 \ ! : (C) == 'N' ? exact_log2 (VALUE) >= 0 \ : (C) == 'O' ? (VALUE) == 0 \ : (C) == 'P' ? (unsigned HOST_WIDE_INT) ((- (VALUE)) + 0x8000) < 0x10000 \ : 0) --- 1055,1061 ---- : (C) == 'L' ? (((VALUE) & 0xffff) == 0 \ && ((VALUE) >> 31 == -1 || (VALUE) >> 31 == 0)) \ : (C) == 'M' ? (VALUE) > 31 \ ! : (C) == 'N' ? (VALUE) > 0 && exact_log2 (VALUE) >= 0 \ : (C) == 'O' ? (VALUE) == 0 \ : (C) == 'P' ? (unsigned HOST_WIDE_INT) ((- (VALUE)) + 0x8000) < 0x10000 \ : 0) *************** do { \ *** 2675,2684 **** --- 2675,2687 ---- {"reg_or_u_short_operand", {SUBREG, REG, CONST_INT}}, \ {"reg_or_cint_operand", {SUBREG, REG, CONST_INT}}, \ {"reg_or_arith_cint_operand", {SUBREG, REG, CONST_INT}}, \ + {"reg_or_add_cint64_operand", {SUBREG, REG, CONST_INT}}, \ + {"reg_or_sub_cint64_operand", {SUBREG, REG, CONST_INT}}, \ {"reg_or_logical_cint_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE}}, \ {"got_operand", {SYMBOL_REF, CONST, LABEL_REF}}, \ {"got_no_const_operand", {SYMBOL_REF, LABEL_REF}}, \ {"easy_fp_constant", {CONST_DOUBLE}}, \ + {"zero_fp_constant", {CONST_DOUBLE}}, \ {"reg_or_mem_operand", {SUBREG, MEM, REG}}, \ {"lwa_operand", {SUBREG, MEM, REG}}, \ {"volatile_mem_operand", {MEM}}, \ *************** do { \ *** 2714,2720 **** {"trap_comparison_operator", {EQ, NE, LE, LT, GE, \ GT, LEU, LTU, GEU, GTU}}, \ {"boolean_operator", {AND, IOR, XOR}}, \ ! {"boolean_or_operator", {IOR, XOR}}, /* uncomment for disabling the corresponding default options */ /* #define MACHINE_no_sched_interblock */ --- 2717,2724 ---- {"trap_comparison_operator", {EQ, NE, LE, LT, GE, \ GT, LEU, LTU, GEU, GTU}}, \ {"boolean_operator", {AND, IOR, XOR}}, \ ! {"boolean_or_operator", {IOR, XOR}}, \ ! {"min_max_operator", {SMIN, SMAX, UMIN, UMAX}}, /* uncomment for disabling the corresponding default options */ /* #define MACHINE_no_sched_interblock */ diff -Nrc3pad gcc-3.0/gcc/config/rs6000/rs6000.md gcc-3.0.1/gcc/config/rs6000/rs6000.md *** gcc-3.0/gcc/config/rs6000/rs6000.md Thu May 17 22:41:19 2001 --- gcc-3.0.1/gcc/config/rs6000/rs6000.md Sat Jul 14 15:50:31 2001 *************** *** 1422,1437 **** rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1])) ? operands[0] : gen_reg_rtx (SImode)); ! HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff; ! HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff); ! ! if (low & 0x8000) ! high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16; /* The ordering here is important for the prolog expander. When space is allocated from the stack, adding 'low' first may produce a temporary deallocation (which would be bad). */ ! emit_insn (gen_addsi3 (tmp, operands[1], GEN_INT (high))); emit_insn (gen_addsi3 (operands[0], tmp, GEN_INT (low))); DONE; } --- 1422,1435 ---- rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1])) ? operands[0] : gen_reg_rtx (SImode)); ! HOST_WIDE_INT val = INTVAL (operands[2]); ! HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000); ! HOST_WIDE_INT rest = trunc_int_for_mode (val - low, SImode); /* The ordering here is important for the prolog expander. When space is allocated from the stack, adding 'low' first may produce a temporary deallocation (which would be bad). */ ! emit_insn (gen_addsi3 (tmp, operands[1], GEN_INT (rest))); emit_insn (gen_addsi3 (operands[0], tmp, GEN_INT (low))); DONE; } *************** *** 1525,1537 **** (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] " { ! HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff; ! HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff); ! ! if (low & 0x8000) ! high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16; ! operands[3] = GEN_INT (high); operands[4] = GEN_INT (low); }") --- 1523,1533 ---- (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] " { ! HOST_WIDE_INT val = INTVAL (operands[2]); ! HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000); ! HOST_WIDE_INT rest = trunc_int_for_mode (val - low, SImode); ! operands[3] = GEN_INT (rest); operands[4] = GEN_INT (low); }") *************** *** 2263,2268 **** --- 2259,2265 ---- " { if (GET_CODE (operands[2]) == CONST_INT + && INTVAL (operands[2]) > 0 && exact_log2 (INTVAL (operands[2])) >= 0) ; else if (TARGET_POWERPC) *************** *** 2314,2325 **** rtx temp1; rtx temp2; ! if (GET_CODE (operands[2]) != CONST_INT) ! FAIL; ! ! i = exact_log2 (INTVAL (operands[2])); ! ! if (i < 0) FAIL; temp1 = gen_reg_rtx (SImode); --- 2311,2319 ---- rtx temp1; rtx temp2; ! if (GET_CODE (operands[2]) != CONST_INT ! || INTVAL (operands[2]) < 0 ! || (i = exact_log2 (INTVAL (operands[2]))) < 0) FAIL; temp1 = gen_reg_rtx (SImode); *************** *** 2335,2341 **** [(set (match_operand:SI 0 "gpc_reg_operand" "=r") (div:SI (match_operand:SI 1 "gpc_reg_operand" "r") (match_operand:SI 2 "const_int_operand" "N")))] ! "exact_log2 (INTVAL (operands[2])) >= 0" "{srai|srawi} %0,%1,%p2\;{aze|addze} %0,%0" [(set_attr "length" "8")]) --- 2329,2335 ---- [(set (match_operand:SI 0 "gpc_reg_operand" "=r") (div:SI (match_operand:SI 1 "gpc_reg_operand" "r") (match_operand:SI 2 "const_int_operand" "N")))] ! "INTVAL (operands[2]) > 0 && exact_log2 (INTVAL (operands[2])) >= 0" "{srai|srawi} %0,%1,%p2\;{aze|addze} %0,%0" [(set_attr "length" "8")]) *************** *** 2345,2351 **** (match_operand:SI 2 "const_int_operand" "N,N")) (const_int 0))) (clobber (match_scratch:SI 3 "=r,r"))] ! "exact_log2 (INTVAL (operands[2])) >= 0" "@ {srai|srawi} %3,%1,%p2\;{aze.|addze.} %3,%3 #" --- 2339,2345 ---- (match_operand:SI 2 "const_int_operand" "N,N")) (const_int 0))) (clobber (match_scratch:SI 3 "=r,r"))] ! "INTVAL (operands[2]) > 0 && exact_log2 (INTVAL (operands[2])) >= 0" "@ {srai|srawi} %3,%1,%p2\;{aze.|addze.} %3,%3 #" *************** *** 2358,2364 **** (match_operand:SI 2 "const_int_operand" "")) (const_int 0))) (clobber (match_scratch:SI 3 ""))] ! "exact_log2 (INTVAL (operands[2])) >= 0 && reload_completed" [(set (match_dup 3) (div:SI (match_dup 1) (match_dup 2))) (set (match_dup 0) --- 2352,2359 ---- (match_operand:SI 2 "const_int_operand" "")) (const_int 0))) (clobber (match_scratch:SI 3 ""))] ! "INTVAL (operands[2]) > 0 && exact_log2 (INTVAL (operands[2])) >= 0 ! && reload_completed" [(set (match_dup 3) (div:SI (match_dup 1) (match_dup 2))) (set (match_dup 0) *************** *** 2373,2379 **** (const_int 0))) (set (match_operand:SI 0 "gpc_reg_operand" "=r,r") (div:SI (match_dup 1) (match_dup 2)))] ! "exact_log2 (INTVAL (operands[2])) >= 0" "@ {srai|srawi} %0,%1,%p2\;{aze.|addze.} %0,%0 #" --- 2368,2374 ---- (const_int 0))) (set (match_operand:SI 0 "gpc_reg_operand" "=r,r") (div:SI (match_dup 1) (match_dup 2)))] ! "INTVAL (operands[2]) > 0 && exact_log2 (INTVAL (operands[2])) >= 0" "@ {srai|srawi} %0,%1,%p2\;{aze.|addze.} %0,%0 #" *************** *** 2387,2393 **** (const_int 0))) (set (match_operand:SI 0 "gpc_reg_operand" "") (div:SI (match_dup 1) (match_dup 2)))] ! "exact_log2 (INTVAL (operands[2])) >= 0 && reload_completed" [(set (match_dup 0) (div:SI (match_dup 1) (match_dup 2))) (set (match_dup 3) --- 2382,2389 ---- (const_int 0))) (set (match_operand:SI 0 "gpc_reg_operand" "") (div:SI (match_dup 1) (match_dup 2)))] ! "INTVAL (operands[2]) > 0 && exact_log2 (INTVAL (operands[2])) >= 0 ! && reload_completed" [(set (match_dup 0) (div:SI (match_dup 1) (match_dup 2))) (set (match_dup 3) *************** *** 4808,4867 **** ;; single DEFINE_INSN for fsel and the define_splits to make them if made by ;; combine. (define_expand "maxsf3" - [(set (match_dup 3) - (minus:SF (match_operand:SF 1 "gpc_reg_operand" "") - (match_operand:SF 2 "gpc_reg_operand" ""))) - (set (match_operand:SF 0 "gpc_reg_operand" "") - (if_then_else:SF (ge (match_dup 3) - (const_int 0)) - (match_dup 1) - (match_dup 2)))] - "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" - " - { operands[3] = gen_reg_rtx (SFmode); }") - - (define_split [(set (match_operand:SF 0 "gpc_reg_operand" "") ! (smax:SF (match_operand:SF 1 "gpc_reg_operand" "") ! (match_operand:SF 2 "gpc_reg_operand" ""))) ! (clobber (match_operand:SF 3 "gpc_reg_operand" ""))] ! "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! [(set (match_dup 3) ! (minus:SF (match_dup 1) (match_dup 2))) ! (set (match_dup 0) ! (if_then_else:SF (ge (match_dup 3) ! (const_int 0)) (match_dup 1) (match_dup 2)))] ! "") (define_expand "minsf3" ! [(set (match_dup 3) ! (minus:SF (match_operand:SF 2 "gpc_reg_operand" "") ! (match_operand:SF 1 "gpc_reg_operand" ""))) ! (set (match_operand:SF 0 "gpc_reg_operand" "") ! (if_then_else:SF (ge (match_dup 3) ! (const_int 0)) ! (match_dup 1) ! (match_dup 2)))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! " ! { operands[3] = gen_reg_rtx (SFmode); }") (define_split [(set (match_operand:SF 0 "gpc_reg_operand" "") ! (smin:SF (match_operand:SF 1 "gpc_reg_operand" "") ! (match_operand:SF 2 "gpc_reg_operand" ""))) ! (clobber (match_operand:SF 3 "gpc_reg_operand" ""))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! [(set (match_dup 3) ! (minus:SF (match_dup 2) (match_dup 1))) ! (set (match_dup 0) ! (if_then_else:SF (ge (match_dup 3) ! (const_int 0)) ! (match_dup 1) ! (match_dup 2)))] ! "") (define_expand "movsfcc" [(set (match_operand:SF 0 "gpc_reg_operand" "") --- 4804,4838 ---- ;; single DEFINE_INSN for fsel and the define_splits to make them if made by ;; combine. (define_expand "maxsf3" [(set (match_operand:SF 0 "gpc_reg_operand" "") ! (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "") ! (match_operand:SF 2 "gpc_reg_operand" "")) (match_dup 1) (match_dup 2)))] ! "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! "{ rs6000_emit_minmax (operands[0], SMAX, operands[1], operands[2]); DONE;}") (define_expand "minsf3" ! [(set (match_operand:SF 0 "gpc_reg_operand" "") ! (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "") ! (match_operand:SF 2 "gpc_reg_operand" "")) ! (match_dup 2) ! (match_dup 1)))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! "{ rs6000_emit_minmax (operands[0], SMIN, operands[1], operands[2]); DONE;}") (define_split [(set (match_operand:SF 0 "gpc_reg_operand" "") ! (match_operator:SF 3 "min_max_operator" ! [(match_operand:SF 1 "gpc_reg_operand" "") ! (match_operand:SF 2 "gpc_reg_operand" "")]))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! [(const_int 0)] ! " ! { rs6000_emit_minmax (operands[0], GET_CODE (operands[3]), ! operands[1], operands[2]); ! DONE; ! }") (define_expand "movsfcc" [(set (match_operand:SF 0 "gpc_reg_operand" "") *************** *** 4871,4942 **** "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" " { ! rtx temp, op0, op1; ! enum rtx_code code = GET_CODE (operands[1]); ! if (! rs6000_compare_fp_p) ! FAIL; ! switch (code) ! { ! case GE: case EQ: ! op0 = rs6000_compare_op0; ! op1 = rs6000_compare_op1; ! break; ! case GT: ! op0 = rs6000_compare_op1; ! op1 = rs6000_compare_op0; ! temp = operands[2]; operands[2] = operands[3]; operands[3] = temp; ! break; ! case LE: ! op0 = rs6000_compare_op1; ! op1 = rs6000_compare_op0; ! break; ! case LT: ! op0 = rs6000_compare_op0; ! op1 = rs6000_compare_op1; ! temp = operands[2]; operands[2] = operands[3]; operands[3] = temp; ! break; ! default: ! FAIL; ! } ! if (GET_MODE (rs6000_compare_op0) == DFmode) ! { ! temp = gen_reg_rtx (DFmode); ! emit_insn (gen_subdf3 (temp, op0, op1)); ! emit_insn (gen_fseldfsf4 (operands[0], temp, operands[2], operands[3])); ! if (code == EQ) ! { ! emit_insn (gen_negdf2 (temp, temp)); ! emit_insn (gen_fseldfsf4 (operands[0], temp, operands[0], operands[3])); ! } ! } else ! { ! temp = gen_reg_rtx (SFmode); ! emit_insn (gen_subsf3 (temp, op0, op1)); ! emit_insn (gen_fselsfsf4 (operands[0], temp, operands[2], operands[3])); ! if (code == EQ) ! { ! emit_insn (gen_negsf2 (temp, temp)); ! emit_insn (gen_fselsfsf4 (operands[0], temp, operands[0], operands[3])); ! } ! } ! DONE; }") ! (define_insn "fselsfsf4" [(set (match_operand:SF 0 "gpc_reg_operand" "=f") (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "f") ! (const_int 0)) (match_operand:SF 2 "gpc_reg_operand" "f") (match_operand:SF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" "fsel %0,%1,%2,%3" [(set_attr "type" "fp")]) ! (define_insn "fseldfsf4" [(set (match_operand:SF 0 "gpc_reg_operand" "=f") (if_then_else:SF (ge (match_operand:DF 1 "gpc_reg_operand" "f") ! (const_int 0)) (match_operand:SF 2 "gpc_reg_operand" "f") (match_operand:SF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" --- 4842,4867 ---- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" " { ! if (rs6000_emit_cmove (operands[0], operands[1], operands[2], operands[3])) ! DONE; else ! FAIL; }") ! (define_insn "*fselsfsf4" [(set (match_operand:SF 0 "gpc_reg_operand" "=f") (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "f") ! (match_operand:SF 4 "zero_fp_constant" "F")) (match_operand:SF 2 "gpc_reg_operand" "f") (match_operand:SF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" "fsel %0,%1,%2,%3" [(set_attr "type" "fp")]) ! (define_insn "*fseldfsf4" [(set (match_operand:SF 0 "gpc_reg_operand" "=f") (if_then_else:SF (ge (match_operand:DF 1 "gpc_reg_operand" "f") ! (match_operand:DF 4 "zero_fp_constant" "F")) (match_operand:SF 2 "gpc_reg_operand" "f") (match_operand:SF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" *************** *** 5039,5104 **** "fsqrt %0,%1" [(set_attr "type" "dsqrt")]) ! ;; For MIN, MAX, and conditional move, we use DEFINE_EXPAND's that involve a ! ;; fsel instruction and some auxiliary computations. Then we just have a ! ;; single DEFINE_INSN for fsel and the define_splits to make them if made by ! ;; combine. (define_expand "maxdf3" - [(set (match_dup 3) - (minus:DF (match_operand:DF 1 "gpc_reg_operand" "") - (match_operand:DF 2 "gpc_reg_operand" ""))) - (set (match_operand:DF 0 "gpc_reg_operand" "") - (if_then_else:DF (ge (match_dup 3) - (const_int 0)) - (match_dup 1) - (match_dup 2)))] - "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" - " - { operands[3] = gen_reg_rtx (DFmode); }") - - (define_split [(set (match_operand:DF 0 "gpc_reg_operand" "") ! (smax:DF (match_operand:DF 1 "gpc_reg_operand" "") ! (match_operand:DF 2 "gpc_reg_operand" ""))) ! (clobber (match_operand:DF 3 "gpc_reg_operand" ""))] ! "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! [(set (match_dup 3) ! (minus:DF (match_dup 1) (match_dup 2))) ! (set (match_dup 0) ! (if_then_else:DF (ge (match_dup 3) ! (const_int 0)) (match_dup 1) (match_dup 2)))] ! "") (define_expand "mindf3" ! [(set (match_dup 3) ! (minus:DF (match_operand:DF 2 "gpc_reg_operand" "") ! (match_operand:DF 1 "gpc_reg_operand" ""))) ! (set (match_operand:DF 0 "gpc_reg_operand" "") ! (if_then_else:DF (ge (match_dup 3) ! (const_int 0)) ! (match_dup 1) ! (match_dup 2)))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! " ! { operands[3] = gen_reg_rtx (DFmode); }") (define_split [(set (match_operand:DF 0 "gpc_reg_operand" "") ! (smin:DF (match_operand:DF 1 "gpc_reg_operand" "") ! (match_operand:DF 2 "gpc_reg_operand" ""))) ! (clobber (match_operand:DF 3 "gpc_reg_operand" ""))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! [(set (match_dup 3) ! (minus:DF (match_dup 2) (match_dup 1))) ! (set (match_dup 0) ! (if_then_else:DF (ge (match_dup 3) ! (const_int 0)) ! (match_dup 1) ! (match_dup 2)))] ! "") (define_expand "movdfcc" [(set (match_operand:DF 0 "gpc_reg_operand" "") --- 4964,5002 ---- "fsqrt %0,%1" [(set_attr "type" "dsqrt")]) ! ;; The conditional move instructions allow us to perform max and min ! ;; operations even when (define_expand "maxdf3" [(set (match_operand:DF 0 "gpc_reg_operand" "") ! (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "") ! (match_operand:DF 2 "gpc_reg_operand" "")) (match_dup 1) (match_dup 2)))] ! "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! "{ rs6000_emit_minmax (operands[0], SMAX, operands[1], operands[2]); DONE;}") (define_expand "mindf3" ! [(set (match_operand:DF 0 "gpc_reg_operand" "") ! (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "") ! (match_operand:DF 2 "gpc_reg_operand" "")) ! (match_dup 2) ! (match_dup 1)))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! "{ rs6000_emit_minmax (operands[0], SMIN, operands[1], operands[2]); DONE;}") (define_split [(set (match_operand:DF 0 "gpc_reg_operand" "") ! (match_operator:DF 3 "min_max_operator" ! [(match_operand:DF 1 "gpc_reg_operand" "") ! (match_operand:DF 2 "gpc_reg_operand" "")]))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" ! [(const_int 0)] ! " ! { rs6000_emit_minmax (operands[0], GET_CODE (operands[3]), ! operands[1], operands[2]); ! DONE; ! }") (define_expand "movdfcc" [(set (match_operand:DF 0 "gpc_reg_operand" "") *************** *** 5108,5179 **** "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" " { ! rtx temp, op0, op1; ! enum rtx_code code = GET_CODE (operands[1]); ! if (! rs6000_compare_fp_p) ! FAIL; ! switch (code) ! { ! case GE: case EQ: ! op0 = rs6000_compare_op0; ! op1 = rs6000_compare_op1; ! break; ! case GT: ! op0 = rs6000_compare_op1; ! op1 = rs6000_compare_op0; ! temp = operands[2]; operands[2] = operands[3]; operands[3] = temp; ! break; ! case LE: ! op0 = rs6000_compare_op1; ! op1 = rs6000_compare_op0; ! break; ! case LT: ! op0 = rs6000_compare_op0; ! op1 = rs6000_compare_op1; ! temp = operands[2]; operands[2] = operands[3]; operands[3] = temp; ! break; ! default: ! FAIL; ! } ! if (GET_MODE (rs6000_compare_op0) == DFmode) ! { ! temp = gen_reg_rtx (DFmode); ! emit_insn (gen_subdf3 (temp, op0, op1)); ! emit_insn (gen_fseldfdf4 (operands[0], temp, operands[2], operands[3])); ! if (code == EQ) ! { ! emit_insn (gen_negdf2 (temp, temp)); ! emit_insn (gen_fseldfdf4 (operands[0], temp, operands[0], operands[3])); ! } ! } else ! { ! temp = gen_reg_rtx (SFmode); ! emit_insn (gen_subsf3 (temp, op0, op1)); ! emit_insn (gen_fselsfdf4 (operands[0], temp, operands[2], operands[3])); ! if (code == EQ) ! { ! emit_insn (gen_negsf2 (temp, temp)); ! emit_insn (gen_fselsfdf4 (operands[0], temp, operands[0], operands[3])); ! } ! } ! DONE; }") ! (define_insn "fseldfdf4" [(set (match_operand:DF 0 "gpc_reg_operand" "=f") (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "f") ! (const_int 0)) (match_operand:DF 2 "gpc_reg_operand" "f") (match_operand:DF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" "fsel %0,%1,%2,%3" [(set_attr "type" "fp")]) ! (define_insn "fselsfdf4" [(set (match_operand:DF 0 "gpc_reg_operand" "=f") (if_then_else:DF (ge (match_operand:SF 1 "gpc_reg_operand" "f") ! (const_int 0)) (match_operand:DF 2 "gpc_reg_operand" "f") (match_operand:DF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT" --- 5006,5031 ---- "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" " { ! if (rs6000_emit_cmove (operands[0], operands[1], operands[2], operands[3])) ! DONE; else ! FAIL; }") ! (define_insn "*fseldfdf4" [(set (match_operand:DF 0 "gpc_reg_operand" "=f") (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "f") ! (match_operand:DF 4 "zero_fp_constant" "F")) (match_operand:DF 2 "gpc_reg_operand" "f") (match_operand:DF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT" "fsel %0,%1,%2,%3" [(set_attr "type" "fp")]) ! (define_insn "*fselsfdf4" [(set (match_operand:DF 0 "gpc_reg_operand" "=f") (if_then_else:DF (ge (match_operand:SF 1 "gpc_reg_operand" "f") ! (match_operand:SF 4 "zero_fp_constant" "F")) (match_operand:DF 2 "gpc_reg_operand" "f") (match_operand:DF 3 "gpc_reg_operand" "f")))] "TARGET_PPC_GFXOPT" *************** *** 5719,5725 **** (define_expand "adddi3" [(set (match_operand:DI 0 "gpc_reg_operand" "") (plus:DI (match_operand:DI 1 "gpc_reg_operand" "") ! (match_operand:DI 2 "reg_or_arith_cint_operand" "")))] "" " { --- 5571,5577 ---- (define_expand "adddi3" [(set (match_operand:DI 0 "gpc_reg_operand" "") (plus:DI (match_operand:DI 1 "gpc_reg_operand" "") ! (match_operand:DI 2 "reg_or_add_cint64_operand" "")))] "" " { *************** *** 5735,5747 **** rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1])) ? operands[0] : gen_reg_rtx (DImode)); ! HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff; ! HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff); ! if (low & 0x8000) ! high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16; ! emit_insn (gen_adddi3 (tmp, operands[1], GEN_INT (high))); emit_insn (gen_adddi3 (operands[0], tmp, GEN_INT (low))); DONE; } --- 5587,5603 ---- rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1])) ? operands[0] : gen_reg_rtx (DImode)); ! HOST_WIDE_INT val = INTVAL (operands[2]); ! HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000); ! HOST_WIDE_INT rest = trunc_int_for_mode (val - low, DImode); ! if (!CONST_OK_FOR_LETTER_P (rest, 'L')) ! FAIL; ! /* The ordering here is important for the prolog expander. ! When space is allocated from the stack, adding 'low' first may ! produce a temporary deallocation (which would be bad). */ ! emit_insn (gen_adddi3 (tmp, operands[1], GEN_INT (rest))); emit_insn (gen_adddi3 (operands[0], tmp, GEN_INT (low))); DONE; } *************** *** 5834,5847 **** (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))] " { ! HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff; ! HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff); ! ! if (low & 0x8000) ! high+=0x10000, low |= ((HOST_WIDE_INT) -1) << 16; - operands[3] = GEN_INT (high); operands[4] = GEN_INT (low); }") (define_insn "one_cmpldi2" --- 5690,5711 ---- (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))] " { ! HOST_WIDE_INT val = INTVAL (operands[2]); ! HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000); ! HOST_WIDE_INT rest = trunc_int_for_mode (val - low, DImode); operands[4] = GEN_INT (low); + if (CONST_OK_FOR_LETTER_P (rest, 'L')) + operands[3] = GEN_INT (rest); + else if (! no_new_pseudos) + { + operands[3] = gen_reg_rtx (DImode); + emit_move_insn (operands[3], operands[2]); + emit_insn (gen_adddi3 (operands[0], operands[1], operands[3])); + DONE; + } + else + FAIL; }") (define_insn "one_cmpldi2" *************** *** 5970,5976 **** (define_expand "subdi3" [(set (match_operand:DI 0 "gpc_reg_operand" "") (minus:DI (match_operand:DI 1 "reg_or_short_operand" "") ! (match_operand:DI 2 "reg_or_arith_cint_operand" "")))] "" " { --- 5834,5840 ---- (define_expand "subdi3" [(set (match_operand:DI 0 "gpc_reg_operand" "") (minus:DI (match_operand:DI 1 "reg_or_short_operand" "") ! (match_operand:DI 2 "reg_or_sub_cint64_operand" "")))] "" " { *************** *** 6129,6134 **** --- 5993,5999 ---- " { if (GET_CODE (operands[2]) == CONST_INT + && INTVAL (operands[2]) > 0 && exact_log2 (INTVAL (operands[2])) >= 0) ; else *************** *** 6142,6152 **** "TARGET_POWERPC64" " { ! int i = exact_log2 (INTVAL (operands[2])); rtx temp1; rtx temp2; ! if (GET_CODE (operands[2]) != CONST_INT || i < 0) FAIL; temp1 = gen_reg_rtx (DImode); --- 6007,6019 ---- "TARGET_POWERPC64" " { ! int i; rtx temp1; rtx temp2; ! if (GET_CODE (operands[2]) != CONST_INT ! || INTVAL (operands[2]) <= 0 ! || (i = exact_log2 (INTVAL (operands[2]))) < 0) FAIL; temp1 = gen_reg_rtx (DImode); *************** *** 6162,6168 **** [(set (match_operand:DI 0 "gpc_reg_operand" "=r") (div:DI (match_operand:DI 1 "gpc_reg_operand" "r") (match_operand:DI 2 "const_int_operand" "N")))] ! "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0" "sradi %0,%1,%p2\;addze %0,%0" [(set_attr "length" "8")]) --- 6029,6036 ---- [(set (match_operand:DI 0 "gpc_reg_operand" "=r") (div:DI (match_operand:DI 1 "gpc_reg_operand" "r") (match_operand:DI 2 "const_int_operand" "N")))] ! "TARGET_POWERPC64 && INTVAL (operands[2]) > 0 ! && exact_log2 (INTVAL (operands[2])) >= 0" "sradi %0,%1,%p2\;addze %0,%0" [(set_attr "length" "8")]) *************** *** 6172,6178 **** (match_operand:DI 2 "const_int_operand" "N,N")) (const_int 0))) (clobber (match_scratch:DI 3 "=r,r"))] ! "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0" "@ sradi %3,%1,%p2\;addze. %3,%3 #" --- 6040,6047 ---- (match_operand:DI 2 "const_int_operand" "N,N")) (const_int 0))) (clobber (match_scratch:DI 3 "=r,r"))] ! "TARGET_POWERPC64 && INTVAL (operands[2]) > 0 ! && exact_log2 (INTVAL (operands[2])) >= 0" "@ sradi %3,%1,%p2\;addze. %3,%3 #" *************** *** 6185,6191 **** (match_operand:DI 2 "const_int_operand" "")) (const_int 0))) (clobber (match_scratch:DI 3 ""))] ! "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0 && reload_completed" [(set (match_dup 3) (div:DI (match_dup 1) (match_dup 2))) (set (match_dup 0) --- 6054,6061 ---- (match_operand:DI 2 "const_int_operand" "")) (const_int 0))) (clobber (match_scratch:DI 3 ""))] ! "TARGET_POWERPC64 && INTVAL (operands[2]) > 0 ! && exact_log2 (INTVAL (operands[2])) >= 0 && reload_completed" [(set (match_dup 3) (div:DI (match_dup 1) (match_dup 2))) (set (match_dup 0) *************** *** 6200,6206 **** (const_int 0))) (set (match_operand:DI 0 "gpc_reg_operand" "=r,r") (div:DI (match_dup 1) (match_dup 2)))] ! "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0" "@ sradi %0,%1,%p2\;addze. %0,%0 #" --- 6070,6077 ---- (const_int 0))) (set (match_operand:DI 0 "gpc_reg_operand" "=r,r") (div:DI (match_dup 1) (match_dup 2)))] ! "TARGET_POWERPC64 && INTVAL (operands[2]) > 0 ! && exact_log2 (INTVAL (operands[2])) >= 0" "@ sradi %0,%1,%p2\;addze. %0,%0 #" *************** *** 6214,6220 **** (const_int 0))) (set (match_operand:DI 0 "gpc_reg_operand" "") (div:DI (match_dup 1) (match_dup 2)))] ! "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0 && reload_completed" [(set (match_dup 0) (div:DI (match_dup 1) (match_dup 2))) (set (match_dup 3) --- 6085,6092 ---- (const_int 0))) (set (match_operand:DI 0 "gpc_reg_operand" "") (div:DI (match_dup 1) (match_dup 2)))] ! "TARGET_POWERPC64 && INTVAL (operands[2]) > 0 ! && exact_log2 (INTVAL (operands[2])) >= 0 && reload_completed" [(set (match_dup 0) (div:DI (match_dup 1) (match_dup 2))) (set (match_dup 3) diff -Nrc3pad gcc-3.0/gcc/config/rs6000/rtems.h gcc-3.0.1/gcc/config/rs6000/rtems.h *** gcc-3.0/gcc/config/rs6000/rtems.h Tue Jan 9 12:46:11 2001 --- gcc-3.0.1/gcc/config/rs6000/rtems.h Thu Aug 16 17:21:00 2001 *************** Boston, MA 02111-1307, USA. */ *** 31,34 **** #endif #undef STARTFILE_DEFAULT_SPEC ! #define STARTFILE_DEFAULT_SPEC "crt0.o%s" --- 31,40 ---- #endif #undef STARTFILE_DEFAULT_SPEC ! #define STARTFILE_DEFAULT_SPEC "ecrti.o%s crt0.o%s" ! ! #undef ENDFILE_DEFAULT_SPEC ! #define ENDFILE_DEFAULT_SPEC "ecrtn.o%s" ! ! /* Get machine-independent configuration parameters for RTEMS. */ ! #include diff -Nrc3pad gcc-3.0/gcc/config/s390/fixdfdi.h gcc-3.0.1/gcc/config/s390/fixdfdi.h *** gcc-3.0/gcc/config/s390/fixdfdi.h Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/s390/fixdfdi.h Fri Aug 3 11:50:11 2001 *************** *** 0 **** --- 1,301 ---- + /* Definitions of target machine for GNU compiler, for IBM S/390 + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Hartmut Penner (hpenner@de.ibm.com) and + Ulrich Weigand (uweigand@de.ibm.com). + + This file is part of GNU CC. + + GNU CC 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 2, or (at your option) + any later version. + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifdef L_fixunsdfdi + #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF) + #define EXCESSD 1022 + #define SIGNBIT 0x80000000 + #define SIGND(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; + }; + + + /* 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, negativ */ + + if (!EXPD (dl1) || SIGND(dl1)) + return 0; + + exp = EXPD (dl1) - EXCESSD - 53; + + /* number < 1 */ + + if (exp < -53) + return 0; + + /* NaN */ + + if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */ + return 0x0ULL; + + /* Number big number & + inf */ + + if (exp >= 12) { + return 0xFFFFFFFFFFFFFFFFULL; + } + + l = MANTD_LL(dl1); + + /* shift down until exp < 12 or l = 0 */ + if (exp > 0) + l <<= exp; + else + l >>= -exp; + + return l; + } + #define __fixunsdfdi ___fixunsdfdi + #endif + #undef L_fixunsdfdi + + #ifdef L_fixdfdi + #define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF) + #define EXCESSD 1022 + #define SIGNBIT 0x80000000 + #define SIGND(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; + }; + + /* 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; + + exp = EXPD (dl1) - EXCESSD - 53; + + /* number < 1 */ + + if (exp < -53) + return 0; + + /* NaN */ + + if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */ + return 0x8000000000000000ULL; + + /* Number big number & +/- inf */ + + if (exp >= 11) { + l = (long long)1<<63; + if (!SIGND(dl1)) + l--; + return l; + } + + l = MANTD_LL(dl1); + + /* shift down until exp < 12 or l = 0 */ + if (exp > 0) + l <<= exp; + else + l >>= -exp; + + return (SIGND (dl1) ? -l : l); + } + #define __fixdfdi ___fixdfdi + #endif + #undef L_fixdfdi + + #ifdef L_fixunssfdi + #define EXP(fp) (((fp.l) >> 23) & 0xFF) + #define EXCESS 126 + #define SIGNBIT 0x80000000 + #define SIGN(fp) ((fp.l) & SIGNBIT) + #define HIDDEN (1 << 23) + #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; + }; + + /* 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, negativ */ + + if (!EXP (fl1) || SIGN(fl1)) + return 0; + + exp = EXP (fl1) - EXCESS - 24; + + /* number < 1 */ + + if (exp < -24) + return 0; + + /* NaN */ + + if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */ + return 0x0ULL; + + /* Number big number & + inf */ + + if (exp >= 41) { + return 0xFFFFFFFFFFFFFFFFULL; + } + + l = MANT(fl1); + + if (exp > 0) + l <<= exp; + else + l >>= -exp; + + return l; + } + #define __fixunssfdi ___fixunssfdi + #endif + #undef L_fixunssfdi + + #ifdef L_fixsfdi + #define EXP(fp) (((fp.l) >> 23) & 0xFF) + #define EXCESS 126 + #define SIGNBIT 0x80000000 + #define SIGN(fp) ((fp.l) & SIGNBIT) + #define HIDDEN (1 << 23) + #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; + }; + + /* 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) - EXCESS - 24; + + /* number < 1 */ + + if (exp < -24) + return 0; + + /* NaN */ + + if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */ + return 0x8000000000000000ULL; + + /* Number big number & +/- inf */ + + if (exp >= 40) { + l = (long long)1<<63; + if (!SIGN(fl1)) + l--; + return l; + } + + l = MANT(fl1); + + if (exp > 0) + l <<= exp; + else + l >>= -exp; + + return (SIGN (fl1) ? -l : l); + } + #define __fixsfdi ___fixsfdi + #endif + #undef L_fixsfdi + diff -Nrc3pad gcc-3.0/gcc/config/s390/linux.h gcc-3.0.1/gcc/config/s390/linux.h *** gcc-3.0/gcc/config/s390/linux.h Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/s390/linux.h Fri Aug 3 11:50:11 2001 *************** *** 0 **** --- 1,381 ---- + /* Definitions for Linux for S/390. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Hartmut Penner (hpenner@de.ibm.com) and + Ulrich Weigand (uweigand@de.ibm.com). + + This file is part of GNU CC. + + GNU CC 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 2, or (at your option) + any later version. + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef _LINUX_H + #define _LINUX_H + + #undef SIZE_TYPE /* use default */ + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (Linux for S/390)"); + + /* Names to predefine in the preprocessor for this target machine. */ + + #define CPP_PREDEFINES "-Dlinux -Asystem(linux) -Acpu(s390) -Amachine(s390) -D__s390__ -Asystem(unix) -Dunix -D__ELF__" + + /* + * Caller save not (always) working in gcc-2.95.2 + */ + + #undef CC1_SPEC + #define CC1_SPEC "-fno-caller-saves" + #define CC1PLUS_SPEC "-fno-caller-saves" + + #undef LINK_SPEC + #ifdef CROSS_COMPILE + #define LINK_SPEC "-m elf_s390 %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld.so.1 \ + -rpath-link=/usr/local/s390-ibm-linux/lib}} \ + %{static:-static}}}" + #else + #define LINK_SPEC "-m elf_s390 %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \ + %{static:-static}}}" + #endif + + /* Need to define this. Otherwise define to BITS_PER_WORD in cexp.c. + But BITS_PER_WORD depends on target flags, which are not defined in + cexpc.c. */ + + #undef WCHAR_TYPE + #define WCHAR_TYPE "int" + #undef WCHAR_TYPE_SIZE + #define WCHAR_TYPE_SIZE 32 + #define MAX_LONG_TYPE_SIZE 64 + + /* Character to start a comment. */ + + #define ASM_COMMENT_START "#" + + + /* Assembler pseudos to introduce constants of various size. */ + + #define ASM_SHORT "\t.word" + #define ASM_LONG "\t.long" + #define ASM_QUAD "\t.quad" + #define ASM_DOUBLE "\t.double" + + + /* Prefix for internally generated assembler labels. */ + #define LPREFIX ".L" + + #define ASM_OUTPUT_LABELREF(FILE, NAME) \ + fprintf (FILE, "%s", NAME); + + + /* This is how to output the definition of a user-level label named NAME, + such as the label on a static function or variable NAME. */ + + #undef ASM_OUTPUT_LABEL + #define ASM_OUTPUT_LABEL(FILE, NAME) \ + (assemble_name (FILE, NAME), fputs (":\n", FILE)) + + /* This is how to output an assembler line defining a `double' constant. */ + + + /* This is how to output an assembler line defining a `double' constant. */ + + #undef ASM_OUTPUT_DOUBLE + #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ + { \ + long t[2]; \ + REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ + fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", \ + t[0] & 0xffffffff, t[1] & 0xffffffff); \ + } + + /* This is how to output an assembler line defining a `float' constant. */ + + #undef ASM_OUTPUT_FLOAT + #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ + { \ + long t; \ + REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ + fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ + } + + /* Store in OUTPUT a string (made with alloca) containing + an assembler-name for a local static variable named NAME. + LABELNO is an integer which is different for each call. */ + + #undef ASM_FORMAT_PRIVATE_NAME + #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ + ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ + sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) + + + #define ASM_OUTPUT_DOUBLE_INT(FILE, VALUE) \ + do { fprintf (FILE, "%s\t", ASM_QUAD); \ + output_addr_const (FILE, (VALUE)); \ + putc ('\n',FILE); \ + } while (0) + + + /* This is how to output an assembler line defining an `int' constant. */ + + #undef ASM_OUTPUT_INT + #define ASM_OUTPUT_INT(FILE, VALUE) \ + do { fprintf (FILE, "%s\t", ASM_LONG); \ + output_addr_const (FILE, (VALUE)); \ + putc ('\n',FILE); \ + } while (0) + + /* Likewise for `char' and `short' constants. + is this supposed to do align too?? */ + + #define ASM_OUTPUT_SHORT(FILE, VALUE) \ + ( fprintf (FILE, "%s ", ASM_SHORT), \ + output_addr_const (FILE, (VALUE)), \ + putc ('\n',FILE)) + + #define ASM_OUTPUT_CHAR(FILE, VALUE) \ + ( fprintf (FILE, "%s ", ASM_BYTE_OP), \ + output_addr_const (FILE, (VALUE)), \ + putc ('\n', FILE)) + + /* This is how to output an assembler line for a numeric constant byte. */ + + #define ASM_OUTPUT_BYTE(FILE, VALUE) \ + fprintf ((FILE), "%s 0x%x\n", ASM_BYTE_OP, (VALUE)) + + /* internal macro to output long */ + #define _ASM_OUTPUT_LONG(FILE, VALUE) \ + fprintf (FILE, "\t.long\t0x%lX\n", VALUE); + + + /* This is how to output an element of a case-vector that is absolute. */ + + #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ + fprintf (FILE, "%s\t%s%d\n", TARGET_64BIT?ASM_QUAD:ASM_LONG, \ + LPREFIX, VALUE) + + /* This is how to output an element of a case-vector that is relative. */ + + #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ + fprintf (FILE, "%s\t%s%d-%s%d\n", TARGET_64BIT?ASM_QUAD:ASM_LONG, \ + LPREFIX, VALUE, LPREFIX, REL) + + + /* Define the parentheses used to group arithmetic operations + in assembler code. */ + + #undef ASM_OPEN_PAREN + #undef ASM_CLOSE_PAREN + #define ASM_OPEN_PAREN "" + #define ASM_CLOSE_PAREN "" + + + + /* This is how to output an assembler line + that says to advance the location counter + to a multiple of 2**LOG bytes. */ + + #define ASM_OUTPUT_ALIGN(FILE, LOG) \ + if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", 1<<(LOG)) + + /* This is how to output an assembler line + that says to advance the location counter by SIZE bytes. */ + + #undef ASM_OUTPUT_SKIP + #define ASM_OUTPUT_SKIP(FILE, SIZE) \ + fprintf ((FILE), "\t.set .,.+%u\n", (SIZE)) + + /* This is how to output an assembler line + that says to advance the location counter + to a multiple of 2**LOG bytes. */ + + #define ASM_OUTPUT_ALIGN(FILE, LOG) \ + if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", 1<<(LOG)) + + /* This is how to output an assembler line + that says to advance the location counter by SIZE bytes. */ + + #define ASM_OUTPUT_SKIP(FILE, SIZE) \ + fprintf ((FILE), "\t.set .,.+%u\n", (SIZE)) + + /* The routine used to output sequences of byte values. We use a special + version of this for most svr4 targets because doing so makes the + generated assembly code more compact (and thus faster to assemble) + as well as more readable. Note that if we find subparts of the + character sequence which end with NUL (and which are shorter than + STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING. */ + + #undef ASM_OUTPUT_ASCII + #define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ + do { \ + register unsigned char *_ascii_bytes = (unsigned char *) (STR); \ + register unsigned char *limit = _ascii_bytes + (LENGTH); \ + register unsigned bytes_in_chunk = 0; \ + for (; _ascii_bytes < limit; _ascii_bytes++) \ + { \ + register unsigned char *p; \ + if (bytes_in_chunk >= 64) \ + { \ + fputc ('\n', (FILE)); \ + bytes_in_chunk = 0; \ + } \ + for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ + continue; \ + if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \ + { \ + if (bytes_in_chunk > 0) \ + { \ + fputc ('\n', (FILE)); \ + bytes_in_chunk = 0; \ + } \ + ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); \ + _ascii_bytes = p; \ + } \ + else \ + { \ + if (bytes_in_chunk == 0) \ + fprintf ((FILE), "%s\t", ASM_BYTE_OP); \ + else \ + fputc (',', (FILE)); \ + fprintf ((FILE), "0x%02x", *_ascii_bytes); \ + bytes_in_chunk += 5; \ + } \ + } \ + if (bytes_in_chunk > 0) \ + fprintf ((FILE), "\n"); \ + } while (0) + + /* Output before read-only data. */ + + #define TEXT_SECTION_ASM_OP ".text" + + /* Output before writable (initialized) data. */ + + #define DATA_SECTION_ASM_OP ".data" + + /* Output before writable (uninitialized) data. */ + + #define BSS_SECTION_ASM_OP ".bss" + + /* This is how to output a command to make the user-level label named NAME + defined for reference from other files. */ + + #define ASM_GLOBALIZE_LABEL(FILE, NAME) \ + (fputs (".globl ", FILE), assemble_name (FILE, NAME), fputs ("\n", FILE)) + + #define DBX_REGISTER_NUMBER(REGNO) (REGNO) + + /* + * This macro generates the assembly code for function entry. + */ + + #define FUNCTION_PROLOGUE(FILE, LSIZE) s390_function_prologue (FILE, LSIZE) + + /* This macro generates the assembly code for function exit, on machines + that need it. If FUNCTION_EPILOGUE is not defined then individual + return instructions are generated for each return statement. Args are + same as for FUNCTION_PROLOGUE. + + The function epilogue should not depend on the current stack pointer! + It should use the frame pointer only. This is mandatory because + of alloca; we also take advantage of it to omit stack adjustments + before returning. */ + + #define FUNCTION_EPILOGUE(FILE, LSIZE) s390_function_epilogue(FILE, LSIZE) + + /* Select section for constant in constant pool. + We are in the right section. + undef for 64 bit mode (linux64.h). + */ + + #undef SELECT_RTX_SECTION + #define SELECT_RTX_SECTION(MODE, X) + + + /* Output code to add DELTA to the first argument, and then jump to FUNCTION. + Used for C++ multiple inheritance. */ + #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ + do { \ + if (TARGET_64BIT) \ + { \ + if (flag_pic) \ + { \ + fprintf (FILE, "\tlarl 1,0f\n"); \ + fprintf (FILE, "\tagf %d,0(1)\n", \ + aggregate_value_p (TREE_TYPE \ + (TREE_TYPE (FUNCTION))) ? 3 :2 ); \ + fprintf (FILE, "\tlarl 1,"); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, "@GOTENT\n"); \ + fprintf (FILE, "\tlg 1,0(1)\n"); \ + fprintf (FILE, "\tbr 1\n"); \ + fprintf (FILE, "0:\t.long %d\n",DELTA); \ + } \ + else \ + { \ + fprintf (FILE, "\tlarl 1,0f\n"); \ + fprintf (FILE, "\tagf %d,0(1)\n", \ + aggregate_value_p (TREE_TYPE \ + (TREE_TYPE (FUNCTION))) ? 3 :2 ); \ + fprintf (FILE, "\tjg "); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, "\n"); \ + fprintf (FILE, "0:\t.long %d\n",DELTA); \ + } \ + } \ + else \ + { \ + if (flag_pic) \ + { \ + fprintf (FILE, "\tbras 1,0f\n"); \ + fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_-.\n"); \ + fprintf (FILE, "\t.long "); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, "@GOT\n"); \ + fprintf (FILE, "\t.long %d\n",DELTA); \ + fprintf (FILE, "0:\tal %d,8(1)\n", \ + aggregate_value_p (TREE_TYPE \ + (TREE_TYPE (FUNCTION))) ? 3 : 2 ); \ + fprintf (FILE, "\tl 0,4(1)\n"); \ + fprintf (FILE, "\tal 1,0(1)\n"); \ + fprintf (FILE, "\talr 1,0\n"); \ + fprintf (FILE, "\tl 1,0(1)\n"); \ + fprintf (FILE, "\tbr 1\n"); \ + } else { \ + fprintf (FILE, "\tbras 1,0f\n"); \ + fprintf (FILE, "\t.long "); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, "-.\n"); \ + fprintf (FILE, "\t.long %d\n",DELTA); \ + fprintf (FILE, "0:\tal %d,4(1)\n", \ + aggregate_value_p (TREE_TYPE \ + (TREE_TYPE (FUNCTION))) ? 3 : 2 ); \ + fprintf (FILE, "\tal 1,0(1)\n"); \ + fprintf (FILE, "\tbr 1\n"); \ + } \ + } \ + } while (0) + + #endif diff -Nrc3pad gcc-3.0/gcc/config/s390/linux64.h gcc-3.0.1/gcc/config/s390/linux64.h *** gcc-3.0/gcc/config/s390/linux64.h Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/s390/linux64.h Tue Aug 14 16:04:36 2001 *************** *** 0 **** --- 1,80 ---- + /* Definitions for Linux for S/390 64bit. + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Hartmut Penner + + This file is part of GNU CC. + + GNU CC 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 2, or (at your option) + any later version. + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef _LINUX64_H + #define _LINUX64_H + + #undef PTRDIFF_TYPE + #define PTRDIFF_TYPE "long int" + + #undef TARGET_DEFAULT + #define TARGET_DEFAULT 0x13 + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (Linux for S/390 zSeries 64 bit)"); + + /* Names to predefine in the preprocessor for this target machine. */ + + #undef CPP_PREDEFINES + #define CPP_PREDEFINES "-Dlinux -Asystem(linux) -Acpu(s390) -Amachine(s390) -D__s390__ -D__s390x__ -Asystem(unix) -Dunix -D__ELF__" + + + #undef LINK_SPEC + #ifdef CROSS_COMPILE + #define LINK_SPEC "-m elf64_s390 %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld64.so.1 \ + -rpath-link=/usr/local/s390x-ibm-linux/lib}} \ + %{static:-static}}}" + #else + #define LINK_SPEC "-m elf64_s390 %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld64.so.1}} \ + %{static:-static}}}" + #endif + + #undef INT_ASM_OP + #define INT_ASM_OP "\t.quad\t" + + #undef PROMOTE_PROTOTYPES + #undef MASK_RETURN_ADDR + #undef SELECT_SECTION + + /* With 64 bit new linkage for floating point registers. */ + #undef CALL_USED_REGISTERS + #define CALL_USED_REGISTERS \ + { 1, 1, 1, 1, \ + 1, 1, 0, 0, \ + 0, 0, 0, 0, \ + 0, 1, 1, 1, \ + 1, 1, 1, 1, \ + 1, 1, 1, 1, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 1, 1 } + + #endif diff -Nrc3pad gcc-3.0/gcc/config/s390/s390-protos.h gcc-3.0.1/gcc/config/s390/s390-protos.h *** gcc-3.0/gcc/config/s390/s390-protos.h Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/s390/s390-protos.h Fri Aug 3 11:50:11 2001 *************** *** 0 **** --- 1,85 ---- + /* Definitions of target machine for GNU compiler, for IBM S/390. + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Hartmut Penner (hpenner@de.ibm.com) + + This file is part of GNU CC. + + GNU CC 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 2, or (at your option) + any later version. + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* Declare functions in s390.c and linux.c */ + + #ifdef RTX_CODE + + #ifdef TREE_CODE + extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx, int)); + extern void s390_va_start PARAMS ((int, tree, rtx)); + + #endif /* TREE_CODE */ + + extern int fp_operand PARAMS ((rtx, enum machine_mode)); + extern int s_operand PARAMS ((rtx, enum machine_mode)); + extern int r_or_im8_operand PARAMS ((rtx, enum machine_mode)); + extern int r_or_s_operand PARAMS ((rtx, enum machine_mode)); + extern int r_or_s_or_im8_operand PARAMS ((rtx, enum machine_mode)); + extern int r_or_x_or_im16_operand PARAMS ((rtx, enum machine_mode)); + extern int bras_sym_operand PARAMS ((rtx, enum machine_mode)); + extern int dead_p PARAMS ((rtx, rtx)); + extern void print_operand PARAMS ((FILE *, rtx, char)); + extern void print_operand_address PARAMS ((FILE *, rtx)); + extern int legitimate_pic_operand_p PARAMS ((rtx)); + extern int legitimate_constant_p PARAMS ((rtx)); + + extern int unsigned_comparison_operator PARAMS ((rtx)); + extern int unsigned_jump_follows_p PARAMS ((rtx)); + + extern void update_cc PARAMS ((rtx, rtx)); + + extern void s390_initialize_trampoline PARAMS ((rtx, rtx, rtx)); + extern void s390_output_symbolic_const PARAMS ((FILE *, rtx)); + extern int s390_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + + extern int s390_stop_dump_lit_p PARAMS ((rtx)); + extern void s390_dump_literal_pool PARAMS ((rtx, rtx)); + extern void s390_expand_eh_epilogue PARAMS ((rtx, rtx, rtx)); + extern void s390_asm_output_external_libcall PARAMS ((FILE *, rtx)); + + #endif /* RTX_CODE */ + + #ifdef TREE_CODE + extern void s390_function_arg_advance PARAMS ((CUMULATIVE_ARGS *, + enum machine_mode, + tree, int)); + extern struct rtx_def *s390_function_arg PARAMS ((CUMULATIVE_ARGS *, + enum machine_mode, tree, int)); + extern int s390_function_arg_partial_nregs PARAMS ((CUMULATIVE_ARGS *, + enum machine_mode, tree, int)); + extern int s390_function_arg_pass_by_reference PARAMS ((enum machine_mode, tree)); + extern void setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *, + enum machine_mode, tree, + int *, int)); + extern struct rtx_def *s390_va_arg PARAMS ((tree, tree)); + extern union tree_node *s390_build_va_list PARAMS ((void)); + extern void s390_asm_output_pool_prologue PARAMS ((FILE *, char *, tree, int)); + extern void encode_section_info PARAMS ((tree)); + + #endif /* TREE_CODE */ + + + extern void s390_trampoline_template PARAMS ((FILE *)); + extern int s390_function_prologue PARAMS ((FILE *, int)); + extern int s390_function_epilogue PARAMS ((FILE *, int)); + extern void s390_final_chunkify PARAMS ((int)); + extern int s390_arg_frame_offset PARAMS ((void)); diff -Nrc3pad gcc-3.0/gcc/config/s390/s390.c gcc-3.0.1/gcc/config/s390/s390.c *** gcc-3.0/gcc/config/s390/s390.c Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/s390/s390.c Fri Aug 10 15:19:19 2001 *************** *** 0 **** --- 1,3118 ---- + /* Subroutines used for code generation on IBM S/390 and zSeries + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Hartmut Penner (hpenner@de.ibm.com) and + Ulrich Weigand (uweigand@de.ibm.com). + + This file is part of GNU CC. + + GNU CC 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 2, or (at your option) + any later version. + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "rtl.h" + #include "expr.h" + #include "tree.h" + #include "regs.h" + #include "hard-reg-set.h" + #include "real.h" + #include "insn-config.h" + #include "conditions.h" + #include "insn-flags.h" + #include "output.h" + #include "insn-attr.h" + #include "flags.h" + #include "recog.h" + #include "math.h" + #include "obstack.h" + #include "except.h" + #include "function.h" + #include "toplev.h" + + #include "tm_p.h" + + extern int reload_completed; + + /* Function count for creating unique internal labels in a compile unit. */ + int s390_function_count = 0; + + /* Save information from a "cmpxx" operation until the branch or scc is + emitted. */ + rtx s390_compare_op0, s390_compare_op1; + + /* Return TRUE or FALSE depending on whether every SET in INSN that + set the CC register has source and destination with matching CC modes, + and that the CC mode is at least as constrained as REQ_MODE. */ + + static int + s390_match_ccmode_set (set, req_mode) + rtx set; + int req_mode; + { + int set_mode; + + if (GET_CODE (set) != SET) + abort (); + + if (GET_CODE (SET_DEST (set)) != REG || !CC_REGNO_P (REGNO (SET_DEST (set)))) + return 1; + + set_mode = GET_MODE (SET_DEST (set)); + switch (set_mode) + { + case CCmode: + return 0; + + case CCSmode: + if (req_mode != CCSmode) + return 0; + break; + case CCUmode: + if (req_mode != CCUmode) + return 0; + break; + case CCZmode: + if (req_mode != CCSmode && req_mode != CCUmode && req_mode != CCTmode) + return 0; + break; + + default: + abort (); + } + + return (GET_MODE (SET_SRC (set)) == set_mode); + } + + int + s390_match_ccmode (insn, req_mode) + rtx insn; + int req_mode; + { + int i; + + if (GET_CODE (PATTERN (insn)) == SET) + return s390_match_ccmode_set (PATTERN (insn), req_mode); + + if (GET_CODE (PATTERN (insn)) == PARALLEL) + for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++) + { + rtx set = XVECEXP (PATTERN (insn), 0, i); + if (GET_CODE (set) == SET) + if (!s390_match_ccmode_set (set, req_mode)) + return 0; + } + + return 1; + } + + + void + optimization_options (level, size) + int level; + int size ATTRIBUTE_UNUSED; + { + #ifdef HAVE_decrement_and_branch_on_count + /* When optimizing, enable use of BRCT instruction. */ + if (level >= 1) + flag_branch_on_count_reg = 1; + #endif + } + + + /* Map for smallest class containing reg regno. */ + + enum reg_class regclass_map[FIRST_PSEUDO_REGISTER] = + { GENERAL_REGS, ADDR_REGS, ADDR_REGS, ADDR_REGS, + ADDR_REGS, ADDR_REGS, ADDR_REGS, ADDR_REGS, + ADDR_REGS, ADDR_REGS, ADDR_REGS, ADDR_REGS, + ADDR_REGS, ADDR_REGS, ADDR_REGS, ADDR_REGS, + FP_REGS, FP_REGS, FP_REGS, FP_REGS, + FP_REGS, FP_REGS, FP_REGS, FP_REGS, + FP_REGS, FP_REGS, FP_REGS, FP_REGS, + FP_REGS, FP_REGS, FP_REGS, FP_REGS, + ADDR_REGS, NO_REGS + }; + + + /* Match exactly zero. */ + + int + const0_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + return op == CONST0_RTX (mode); + } + + /* Match exactly one. */ + + int + const1_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + return op == CONST1_RTX (mode); + } + + + /* Return 1 if OP needs base and index register. */ + + static int + base_n_index_p (rtx op) + { + if ((GET_CODE (op) == PLUS) && + (GET_CODE (XEXP (op, 0)) == PLUS || + GET_CODE (XEXP (op, 1)) == PLUS || + GET_CODE (XEXP (op, 1)) == REG )) + return 1; + return 0; + } + + /* Check mode and mode of op, set it to mode of op, if VOIDmode. */ + + static int + check_mode (op, mode) + register rtx op; + enum machine_mode *mode; + { + if (*mode == VOIDmode) + *mode = GET_MODE (op); + else + { + if (GET_MODE (op) != VOIDmode && GET_MODE (op) != *mode) + return 0; + } + return 1; + } + + + /* Return 1 if OP a valid operand for the LARL instruction. + OP is the current operation. + MODE is the current operation mode. */ + + int + larl_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + rtx sym; + register enum rtx_code code = GET_CODE (op); + + if (! check_mode (op, &mode)) + return 0; + + /* Allow labels and local symbols. */ + if (GET_CODE (op) == LABEL_REF) + return 1; + if (GET_CODE (op) == SYMBOL_REF + && (!flag_pic || SYMBOL_REF_FLAG (op) + || CONSTANT_POOL_ADDRESS_P (op))) + return 1; + + /* Everything else must have a CONST, so strip it. */ + if (GET_CODE (op) != CONST) + return 0; + op = XEXP (op, 0); + + /* Allow adding *even* constants. */ + if (GET_CODE (op) == PLUS) + { + if (GET_CODE (XEXP (op, 1)) != CONST_INT + || (INTVAL (XEXP (op, 1)) & 1) != 0) + return 0; + op = XEXP (op, 0); + } + + /* Labels and local symbols allowed here as well. */ + if (GET_CODE (op) == LABEL_REF) + return 1; + if (GET_CODE (op) == SYMBOL_REF + && (!flag_pic || SYMBOL_REF_FLAG (op) + || CONSTANT_POOL_ADDRESS_P (op))) + return 1; + + /* Now we must have a @GOTENT offset or @PLT stub. */ + if (GET_CODE (op) == UNSPEC + && XINT (op, 1) == 111) + return 1; + if (GET_CODE (op) == UNSPEC + && XINT (op, 1) == 113) + return 1; + + return 0; + } + + /* Return 1 if OP is a valid FP-Register. + OP is the current operation. + MODE is the current operation mode. */ + + int + fp_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + register enum rtx_code code = GET_CODE (op); + if (! check_mode (op, &mode)) + return 0; + if (code == REG && REGNO_OK_FOR_FP_P (REGNO (op))) + return 1; + else + return 0; + } + + /* Return 1 if OP is a valid S operand for an RS, SI or SS type instruction. */ + + int + s_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + register enum rtx_code code = GET_CODE (op); + + if (! check_mode (op,&mode)) + return 0; + + if (code == MEM) { + if (base_n_index_p (XEXP (op, 0))) + return 0; + } + + return memory_operand (op, mode); + } + + /* Return 1 if OP is a valid R or S operand for an RS, SI or SS type + instruction. */ + + int + r_or_s_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + register enum rtx_code code = GET_CODE (op); + + if (!general_operand (op, mode)) + return 0; + + if (code == MEM) { + if (base_n_index_p (XEXP (op, 0))) + return 0; + else + return memory_operand (op, mode); + } + return register_operand (op, mode); + } + + /* Return 1 if OP is a valid R or S or immediate operand for + RS, SI or SS type instruction. */ + + int + r_or_s_or_im8_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + register enum rtx_code code = GET_CODE (op); + + if (!general_operand (op, mode)) + return 0; + + if (code == MEM) { + if (base_n_index_p (XEXP (op, 0))) + return 0; + else + return memory_operand (op, mode); + } + return register_operand (op, mode) || immediate_operand (op, mode); + } + + /* Return 1 if OP is a valid R or X or 16 bit immediate operand for + RX, RR or RI type instruction. */ + + int + r_or_x_or_im16_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + + if (! general_operand (op, mode)) + return 0; + + if (GET_CODE (op) == CONST_INT) + return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'K')); + return register_operand (op, mode) || memory_operand (op, mode); + } + + /* Return 1 if OP is a valid R or 8 bit immediate operand for + !!!!!!! type instruction. */ + + int + r_or_im8_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + + if (!general_operand (op, mode)) + return 0; + + if (GET_CODE (op) == CONST_INT) + return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'J')); + return register_operand (op, mode) || memory_operand (op, mode); + } + + /* Return 1 if OP is a valid operand for the 'test under mask' + instruction with 16 bit immediate. + The value should only have set bits in one halfword. */ + + int + tmxx_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + rtx con; + if (GET_CODE (op) == CONST_INT) + return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'L')); + if (GET_CODE (op) == MEM && GET_CODE (XEXP (op, 0)) == SYMBOL_REF && + CONSTANT_POOL_ADDRESS_P (XEXP (op, 0))) + { + con = get_pool_constant (XEXP (op, 0)); + + if (GET_CODE (con) == CONST_INT) + { + unsigned HOST_WIDEST_INT c; + + c = (unsigned HOST_WIDEST_INT) INTVAL (con); + + return ((c & 0xffff) ? ((c & 0xffffffffffff0000ULL)==0) : + (c & 0xffff0000) ? ((c & 0xffffffff0000ffffULL)==0) : + (c & 0xffff00000000ULL) ? ((c & 0xffff0000ffffffffULL)==0) : + (c & 0xffff000000000000ULL) ? ((c & 0xffffffffffffULL)==0) : 1); + + } + } + return 0; + } + + + /* Return 1 if valid operand for BRAS + OP is the current operation. + MODE is the current operation mode. */ + + int + bras_sym_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + register enum rtx_code code = GET_CODE (op); + + /* Allow SYMBOL_REFs. */ + if (code == SYMBOL_REF) + return 1; + + /* Allow @PLT stubs. */ + if (code == CONST + && GET_CODE (XEXP (op, 0)) == UNSPEC + && XINT (XEXP (op, 0), 1) == 113) + return 1; + return 0; + } + + + /* Return 1 if OP is a load multiple operation. It is known to be a + PARALLEL and the first section will be tested. */ + + int + load_multiple_operation (op, mode) + rtx op; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + int count = XVECLEN (op, 0); + unsigned int dest_regno; + rtx src_addr; + int i; + + + /* Perform a quick check so we don't blow up below. */ + if (count <= 1 + || GET_CODE (XVECEXP (op, 0, 0)) != SET + || GET_CODE (SET_DEST (XVECEXP (op, 0, 0))) != REG + || GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) != MEM) + return 0; + + dest_regno = REGNO (SET_DEST (XVECEXP (op, 0, 0))); + src_addr = XEXP (SET_SRC (XVECEXP (op, 0, 0)), 0); + + for (i = 1; i < count; i++) + { + rtx elt = XVECEXP (op, 0, i); + + if (GET_CODE (elt) != SET + || GET_CODE (SET_DEST (elt)) != REG + || GET_MODE (SET_DEST (elt)) != Pmode + || REGNO (SET_DEST (elt)) != dest_regno + i + || GET_CODE (SET_SRC (elt)) != MEM + || GET_MODE (SET_SRC (elt)) != Pmode + || GET_CODE (XEXP (SET_SRC (elt), 0)) != PLUS + || ! rtx_equal_p (XEXP (XEXP (SET_SRC (elt), 0), 0), src_addr) + || GET_CODE (XEXP (XEXP (SET_SRC (elt), 0), 1)) != CONST_INT + || INTVAL (XEXP (XEXP (SET_SRC (elt), 0), 1)) != i * 4) + return 0; + } + + return 1; + } + + /* Similar, but tests for store multiple. */ + + int + store_multiple_operation (op, mode) + rtx op; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + int count = XVECLEN (op, 0) - 1; + unsigned int src_regno; + rtx dest_addr; + int i; + + /* Perform a quick check so we don't blow up below. */ + if (count <= 1 + || GET_CODE (XVECEXP (op, 0, 0)) != SET + || GET_CODE (SET_DEST (XVECEXP (op, 0, 0))) != MEM + || GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) != REG) + return 0; + + src_regno = REGNO (SET_SRC (XVECEXP (op, 0, 0))); + dest_addr = XEXP (SET_DEST (XVECEXP (op, 0, 0)), 0); + + for (i = 1; i < count; i++) + { + rtx elt = XVECEXP (op, 0, i); + + if (GET_CODE (elt) != SET + || GET_CODE (SET_SRC (elt)) != REG + || GET_MODE (SET_SRC (elt)) != Pmode + || REGNO (SET_SRC (elt)) != src_regno + i + || GET_CODE (SET_DEST (elt)) != MEM + || GET_MODE (SET_DEST (elt)) != Pmode + || GET_CODE (XEXP (SET_DEST (elt), 0)) != PLUS + || ! rtx_equal_p (XEXP (XEXP (SET_DEST (elt), 0), 0), dest_addr) + || GET_CODE (XEXP (XEXP (SET_DEST (elt), 0), 1)) != CONST_INT + || INTVAL (XEXP (XEXP (SET_DEST (elt), 0), 1)) != i * 4) + return 0; + } + return 1; + } + + + /* Returns 1 if OP contains a symbol reference */ + + int + symbolic_reference_mentioned_p (op) + rtx op; + { + register char *fmt; + register int i; + + if (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == LABEL_REF) + return 1; + + fmt = GET_RTX_FORMAT (GET_CODE (op)); + for (i = GET_RTX_LENGTH (GET_CODE (op)) - 1; i >= 0; i--) + { + if (fmt[i] == 'E') + { + register int j; + + for (j = XVECLEN (op, i) - 1; j >= 0; j--) + if (symbolic_reference_mentioned_p (XVECEXP (op, i, j))) + return 1; + } + + else if (fmt[i] == 'e' && symbolic_reference_mentioned_p (XEXP (op, i))) + return 1; + } + + return 0; + } + + + /* Returns 1 if OP is a legitimate general operand when + generating PIC code. It is given that flag_pic is on + and that OP satisfies CONSTANT_P or is a CONST_DOUBLE. */ + + int + legitimate_pic_operand_p (op) + register rtx op; + { + /* All non-symbolic constants that made it + up to here are fine. */ + if (!SYMBOLIC_CONST (op)) + return 1; + + /* Accept immediate LARL operands. */ + if (TARGET_64BIT) + return larl_operand (op, VOIDmode); + + /* Reject everything else; must be handled + via emit_pic_move. */ + return 0; + } + + /* Returns 1 if the constant value OP is a legitimate general operand. + It is given that OP satisfies CONSTANT_P or is a CONST_DOUBLE. */ + + int + legitimate_constant_p (op) + register rtx op; + { + /* Reject doubles and integers out of range. */ + if (GET_CODE (op) == CONST_DOUBLE || + (GET_CODE (op) == CONST_INT && + (INTVAL (op) < -32768 || INTVAL (op) > 32767))) + return 0; + + /* Accept all other non-symbolic constants. */ + if (!SYMBOLIC_CONST (op)) + return 1; + + /* In the PIC case, symbolic constants must *not* be + forced into the literal pool. We accept them here, + so that they will be handled by emit_pic_move. */ + if (flag_pic) + return 1; + + /* Even in the non-PIC case, we can accept immediate + LARL operands here. */ + if (TARGET_64BIT) + return larl_operand (op, VOIDmode); + + /* All remaining non-PIC symbolic constants are + forced into the literal pool. */ + return 0; + } + + + /* Structure used to hold the components of a S/390 memory + address. A legitimate address on S/390 is of the general + form + base + index + displacement + where any of the components is optional. + + base and index are registers of the class ADDR_REGS, + displacement is an unsigned 12-bit immediate constant. */ + + struct s390_address + { + rtx base; + rtx indx; + rtx disp; + }; + + /* Decompose a RTL expression ADDR for a memory address into + its components, returned in OUT. The boolean STRICT + specifies whether strict register checking applies. + Returns 0 if ADDR is not a valid memory address, nonzero + otherwise. If OUT is NULL, don't return the components, + but check for validity only. + + Note: Only addresses in canonical form are recognized. + LEGITIMIZE_ADDRESS should convert non-canonical forms to the + canonical form so that they will be recognized. */ + + static int + s390_decompose_address (addr, out, strict) + register rtx addr; + struct s390_address *out; + int strict; + { + rtx base = NULL_RTX; + rtx indx = NULL_RTX; + rtx disp = NULL_RTX; + + /* Decompose address into base + index + displacement. */ + + if (GET_CODE (addr) == REG || GET_CODE (addr) == UNSPEC) + base = addr; + + else if (GET_CODE (addr) == PLUS) + { + rtx op0 = XEXP (addr, 0); + rtx op1 = XEXP (addr, 1); + enum rtx_code code0 = GET_CODE (op0); + enum rtx_code code1 = GET_CODE (op1); + + if (code0 == REG || code0 == UNSPEC) + { + if (code1 == REG || code1 == UNSPEC) + { + indx = op0; /* index + base */ + base = op1; + } + + else + { + base = op0; /* base + displacement */ + disp = op1; + } + } + + else if (code0 == PLUS) + { + indx = XEXP (op0, 0); /* index + base + disp */ + base = XEXP (op0, 1); + disp = op1; + } + + else + { + return FALSE; + } + } + + else + disp = addr; /* displacement */ + + + /* Validate base register. */ + if (base) + { + if (GET_CODE (base) == UNSPEC) + { + if (XVECLEN (base, 0) != 1 || XINT (base, 1) != 101) + return FALSE; + base = XVECEXP (base, 0, 0); + } + + if (GET_CODE (base) != REG || GET_MODE (base) != Pmode) + return FALSE; + + if ((strict && ! REG_OK_FOR_BASE_STRICT_P (base)) + || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (base))) + return FALSE; + } + + /* Validate index register. */ + if (indx) + { + if (GET_CODE (indx) == UNSPEC) + { + if (XVECLEN (indx, 0) != 1 || XINT (indx, 1) != 101) + return FALSE; + indx = XVECEXP (indx, 0, 0); + } + + if (GET_CODE (indx) != REG || GET_MODE (indx) != Pmode) + return FALSE; + + if ((strict && ! REG_OK_FOR_BASE_STRICT_P (indx)) + || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (indx))) + return FALSE; + } + + /* Validate displacement. */ + if (disp) + { + /* Allow integer constant in range. */ + if (GET_CODE (disp) == CONST_INT) + { + if (INTVAL (disp) < 0 || INTVAL (disp) >= 4096) + return FALSE; + } + + /* In the small-PIC case, the linker converts @GOT12 + offsets to possible displacements. */ + else if (GET_CODE (disp) == CONST + && GET_CODE (XEXP (disp, 0)) == UNSPEC + && XINT (XEXP (disp, 0), 1) == 110) + { + if (flag_pic != 1) + return FALSE; + } + + /* We can convert literal pool addresses to + displacements by basing them off the base register. */ + else + { + /* In some cases, we can accept an additional + small constant offset. Split these off here. */ + + int offset = 0; + + if (GET_CODE (disp) == CONST + && GET_CODE (XEXP (disp, 0)) == PLUS + && GET_CODE (XEXP (XEXP (disp, 0), 1)) == CONST_INT) + { + offset = INTVAL (XEXP (XEXP (disp, 0), 1)); + disp = XEXP (XEXP (disp, 0), 0); + } + + /* Now we must have a literal pool address. */ + if (GET_CODE (disp) != SYMBOL_REF + || !CONSTANT_POOL_ADDRESS_P (disp)) + return FALSE; + + /* In 64-bit PIC mode we cannot accept symbolic + constants in the constant pool. */ + if (TARGET_64BIT && flag_pic + && SYMBOLIC_CONST (get_pool_constant (disp))) + return FALSE; + + /* If we have an offset, make sure it does not + exceed the size of the constant pool entry. */ + if (offset && offset >= GET_MODE_SIZE (get_pool_mode (disp))) + return FALSE; + + /* Either base or index must be free to + hold the base register. */ + if (base && indx) + return FALSE; + + /* Convert the address. */ + if (base) + indx = gen_rtx_REG (Pmode, BASE_REGISTER); + else + base = gen_rtx_REG (Pmode, BASE_REGISTER); + + disp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, disp), 100); + disp = gen_rtx_CONST (Pmode, disp); + + if (offset) + disp = plus_constant (disp, offset); + } + } + + if (out) + { + out->base = base; + out->indx = indx; + out->disp = disp; + } + + return TRUE; + } + + /* Returns nonzero if ADDR is a valid memory address. + STRICT specifies whether strict register checking applies. */ + + int + legitimate_address_p (mode, addr, strict) + enum machine_mode mode; + register rtx addr; + int strict; + { + return s390_decompose_address (addr, NULL, strict); + } + + /* Return a legitimate reference for ORIG (an address) using the + register REG. If REG is 0, a new pseudo is generated. + + There are two types of references that must be handled: + + 1. Global data references must load the address from the GOT, via + the PIC reg. An insn is emitted to do this load, and the reg is + returned. + + 2. Static data references, constant pool addresses, and code labels + compute the address as an offset from the GOT, whose base is in + the PIC reg. Static data objects have SYMBOL_REF_FLAG set to + differentiate them from global data objects. The returned + address is the PIC reg + an unspec constant. + + GO_IF_LEGITIMATE_ADDRESS rejects symbolic references unless the PIC + reg also appears in the address. */ + + rtx + legitimize_pic_address (orig, reg) + rtx orig; + rtx reg; + { + rtx addr = orig; + rtx new = orig; + rtx base; + + if (GET_CODE (addr) == LABEL_REF + || (GET_CODE (addr) == SYMBOL_REF + && (SYMBOL_REF_FLAG (addr) + || CONSTANT_POOL_ADDRESS_P (addr)))) + { + /* This is a local symbol. */ + if (TARGET_64BIT) + { + /* Access local symbols PC-relative via LARL. + This is the same as in the non-PIC case, so it is + handled automatically ... */ + } + else + { + /* Access local symbols relative to the literal pool. */ + + rtx temp = reg? reg : gen_reg_rtx (Pmode); + + addr = gen_rtx_UNSPEC (SImode, gen_rtvec (1, addr), 100); + addr = gen_rtx_CONST (SImode, addr); + addr = force_const_mem (SImode, addr); + emit_move_insn (temp, addr); + + base = gen_rtx_REG (Pmode, BASE_REGISTER); + base = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, base), 101); + new = gen_rtx_PLUS (Pmode, base, temp); + + if (reg != 0) + { + emit_move_insn (reg, new); + new = reg; + } + } + } + else if (GET_CODE (addr) == SYMBOL_REF) + { + if (reg == 0) + reg = gen_reg_rtx (Pmode); + + if (flag_pic == 1) + { + /* Assume GOT offset < 4k. This is handled the same way + in both 31- and 64-bit code (@GOT12). */ + + current_function_uses_pic_offset_table = 1; + + new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), 110); + new = gen_rtx_CONST (Pmode, new); + new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new); + new = gen_rtx_MEM (Pmode, new); + RTX_UNCHANGING_P (new) = 1; + emit_move_insn (reg, new); + new = reg; + } + else if (TARGET_64BIT) + { + /* If the GOT offset might be >= 4k, we determine the position + of the GOT entry via a PC-relative LARL (@GOTENT). */ + + rtx temp = gen_reg_rtx (Pmode); + + new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), 111); + new = gen_rtx_CONST (Pmode, new); + emit_move_insn (temp, new); + + new = gen_rtx_MEM (Pmode, temp); + RTX_UNCHANGING_P (new) = 1; + emit_move_insn (reg, new); + new = reg; + } + else + { + /* If the GOT offset might be >= 4k, we have to load it + from the literal pool (@GOT). */ + + rtx temp = gen_reg_rtx (Pmode); + + current_function_uses_pic_offset_table = 1; + + addr = gen_rtx_UNSPEC (SImode, gen_rtvec (1, addr), 112); + addr = gen_rtx_CONST (SImode, addr); + addr = force_const_mem (SImode, addr); + emit_move_insn (temp, addr); + + new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, temp); + new = gen_rtx_MEM (Pmode, new); + RTX_UNCHANGING_P (new) = 1; + emit_move_insn (reg, new); + new = reg; + } + } + else + { + if (GET_CODE (addr) == CONST) + { + addr = XEXP (addr, 0); + if (GET_CODE (addr) == UNSPEC) + { + if (XVECLEN (addr, 0) != 1) + abort (); + switch (XINT (addr, 1)) + { + /* If someone moved an @GOT or lt-relative UNSPEC + out of the literal pool, force them back in. */ + case 100: + case 112: + case 114: + new = force_const_mem (SImode, orig); + break; + + /* @GOTENT is OK as is. */ + case 111: + break; + + /* @PLT is OK as is on 64-bit, must be converted to + lt-relative PLT on 31-bit. */ + case 113: + if (!TARGET_64BIT) + { + rtx temp = reg? reg : gen_reg_rtx (Pmode); + + addr = XVECEXP (addr, 0, 0); + addr = gen_rtx_UNSPEC (SImode, gen_rtvec (1, addr), 114); + addr = gen_rtx_CONST (SImode, addr); + addr = force_const_mem (SImode, addr); + emit_move_insn (temp, addr); + + base = gen_rtx_REG (Pmode, BASE_REGISTER); + base = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, base), 101); + new = gen_rtx_PLUS (Pmode, base, temp); + + if (reg != 0) + { + emit_move_insn (reg, new); + new = reg; + } + } + break; + + /* Everything else cannot happen. */ + default: + abort (); + } + } + else if (GET_CODE (addr) != PLUS) + abort (); + } + if (GET_CODE (addr) == PLUS) + { + rtx op0 = XEXP (addr, 0), op1 = XEXP (addr, 1); + /* Check first to see if this is a constant offset + from a local symbol reference. */ + if ((GET_CODE (op0) == LABEL_REF + || (GET_CODE (op0) == SYMBOL_REF + && (SYMBOL_REF_FLAG (op0) + || CONSTANT_POOL_ADDRESS_P (op0)))) + && GET_CODE (op1) == CONST_INT) + { + if (TARGET_64BIT) + { + if (INTVAL (op1) & 1) + { + /* LARL can't handle odd offsets, so emit a + pair of LARL and LA. */ + rtx temp = reg? reg : gen_reg_rtx (Pmode); + + if (INTVAL (op1) < 0 || INTVAL (op1) >= 4096) + { + int even = INTVAL (op1) - 1; + op0 = gen_rtx_PLUS (Pmode, op0, GEN_INT (even)); + op1 = GEN_INT (1); + } + + emit_move_insn (temp, op0); + new = gen_rtx_PLUS (Pmode, temp, op1); + + if (reg != 0) + { + emit_move_insn (reg, new); + new = reg; + } + } + else + { + /* If the offset is even, we can just use LARL. + This will happen automatically. */ + } + } + else + { + /* Access local symbols relative to the literal pool. */ + + rtx temp = reg? reg : gen_reg_rtx (Pmode); + + addr = gen_rtx_UNSPEC (SImode, gen_rtvec (1, op0), 100); + addr = gen_rtx_PLUS (SImode, addr, op1); + addr = gen_rtx_CONST (SImode, addr); + addr = force_const_mem (SImode, addr); + emit_move_insn (temp, addr); + + base = gen_rtx_REG (Pmode, BASE_REGISTER); + base = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, base), 101); + new = gen_rtx_PLUS (Pmode, base, temp); + + if (reg != 0) + { + emit_move_insn (reg, new); + new = reg; + } + } + } + + /* Now, check whether it is an LT-relative symbol plus offset + that was pulled out of the literal pool. Force it back in. */ + + else if (GET_CODE (op0) == UNSPEC + && GET_CODE (op1) == CONST_INT) + { + if (XVECLEN (op0, 0) != 1) + abort (); + if (XINT (op0, 1) != 100) + abort (); + + new = force_const_mem (SImode, orig); + } + + /* Otherwise, compute the sum. */ + else + { + base = legitimize_pic_address (XEXP (addr, 0), reg); + new = legitimize_pic_address (XEXP (addr, 1), + base == reg ? NULL_RTX : reg); + if (GET_CODE (new) == CONST_INT) + new = plus_constant (base, INTVAL (new)); + else + { + if (GET_CODE (new) == PLUS && CONSTANT_P (XEXP (new, 1))) + { + base = gen_rtx_PLUS (Pmode, base, XEXP (new, 0)); + new = XEXP (new, 1); + } + new = gen_rtx_PLUS (Pmode, base, new); + } + + if (GET_CODE (new) == CONST) + new = XEXP (new, 0); + new = force_operand (new, 0); + } + } + } + return new; + } + + /* Emit insns to move operands[1] into operands[0]. */ + + void + emit_pic_move (operands, mode) + rtx *operands; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode); + + if (GET_CODE (operands[0]) == MEM && SYMBOLIC_CONST (operands[1])) + operands[1] = force_reg (Pmode, operands[1]); + else + operands[1] = legitimize_pic_address (operands[1], temp); + } + + /* Try machine-dependent ways of modifying an illegitimate address + to be legitimate. If we find one, return the new, valid address. + This macro is used in only one place: `memory_address' in explow.c. + + OLDX is the address as it was before break_out_memory_refs was called. + In some cases it is useful to look at this to decide what needs to be done. + + MODE and WIN are passed so that this macro can use + GO_IF_LEGITIMATE_ADDRESS. + + It is always safe for this macro to do nothing. It exists to recognize + opportunities to optimize the output. + + When -fpic is used, special handling is needed for symbolic references. + See comments by legitimize_pic_address for details. */ + + rtx + legitimize_address (x, oldx, mode) + register rtx x; + register rtx oldx ATTRIBUTE_UNUSED; + enum machine_mode mode; + { + if (flag_pic && SYMBOLIC_CONST (x)) + return legitimize_pic_address (x, 0); + + return x; + } + + + /* Output branch condition code of RTX code in assembler + syntax to stdio stream FILE. */ + + static void + output_branch_condition (FILE *file, rtx code) + { + switch (GET_CODE (code)) + { + case EQ: + fprintf (file, "e"); + break; + case NE: + fprintf (file, "ne"); + break; + case GT: + case GTU: + fprintf (file, "h"); + break; + case LT: + case LTU: + fprintf (file, "l"); + break; + case GE: + case GEU: + fprintf (file, "he"); + break; + case LE: + case LEU: + fprintf (file, "le"); + break; + default: + fatal_insn ("Unknown CC code", code); + } + } + + /* Output the inverse of the branch condition code of RTX code + in assembler syntax to stdio stream FILE. */ + + static void + output_inverse_branch_condition (FILE *file, rtx code) + { + switch (GET_CODE (code)) + { + case EQ: + fprintf (file, "ne"); + break; + case NE: + fprintf (file, "e"); + break; + case GT: + case GTU: + fprintf (file, "nh"); + break; + case LT: + case LTU: + fprintf (file, "nl"); + break; + case GE: + case GEU: + fprintf (file, "nhe"); + break; + case LE: + case LEU: + fprintf (file, "nle"); + break; + default: + fatal_insn ("Unknown CC code", code); + } + } + + /* Output symbolic constant X in assembler syntax to + stdio stream FILE. */ + + void + s390_output_symbolic_const (FILE *file, rtx x) + { + switch (GET_CODE (x)) + { + case CONST: + case ZERO_EXTEND: + case SIGN_EXTEND: + s390_output_symbolic_const (file, XEXP (x, 0)); + break; + + case PLUS: + s390_output_symbolic_const (file, XEXP (x, 0)); + fprintf (file, "+"); + s390_output_symbolic_const (file, XEXP (x, 1)); + break; + + case MINUS: + s390_output_symbolic_const (file, XEXP (x, 0)); + fprintf (file, "-"); + s390_output_symbolic_const (file, XEXP (x, 1)); + break; + + case CONST_INT: + output_addr_const (file, x); + break; + + case LABEL_REF: + case CODE_LABEL: + output_addr_const (file, x); + break; + + case SYMBOL_REF: + output_addr_const (file, x); + if (CONSTANT_POOL_ADDRESS_P (x) && s390_pool_count != 0) + fprintf (file, "_%X", s390_pool_count); + break; + + case UNSPEC: + if (XVECLEN (x, 0) != 1) + output_operand_lossage ("invalid UNSPEC as operand (1)"); + switch (XINT (x, 1)) + { + case 100: + s390_output_symbolic_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "-.LT%X_%X", + s390_function_count, s390_pool_count); + break; + case 110: + s390_output_symbolic_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "@GOT12"); + break; + case 111: + s390_output_symbolic_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "@GOTENT"); + break; + case 112: + s390_output_symbolic_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "@GOT"); + break; + case 113: + s390_output_symbolic_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "@PLT"); + break; + case 114: + s390_output_symbolic_const (file, XVECEXP (x, 0, 0)); + fprintf (file, "@PLT-.LT%X_%X", + s390_function_count, s390_pool_count); + break; + default: + output_operand_lossage ("invalid UNSPEC as operand (2)"); + break; + } + break; + + default: + fatal_insn ("UNKNOWN in s390_output_symbolic_const !?", x); + break; + } + } + + /* Output address operand ADDR in assembler syntax to + stdio stream FILE. */ + + void + print_operand_address (FILE *file, rtx addr) + { + struct s390_address ad; + + if (!s390_decompose_address (addr, &ad, TRUE)) + output_operand_lossage ("Cannot decompose address.\n"); + + if (ad.disp) + s390_output_symbolic_const (file, ad.disp); + else + fprintf (file, "0"); + + if (ad.base && ad.indx) + fprintf (file, "(%s,%s)", reg_names[REGNO (ad.indx)], + reg_names[REGNO (ad.base)]); + else if (ad.base) + fprintf (file, "(%s)", reg_names[REGNO (ad.base)]); + } + + /* Output operand X in assembler syntax to stdio stream FILE. + The following format flags are recognized as CODE: + + 'C': print opcode suffix for branch condition. + 'D': print opcode suffix for inverse branch condition. + 'Y': print current constant pool address (pc-relative). + 'y': print current constant pool address (absolute). + 'O': print only the displacement of a memory reference. + 'R': print only the base register of a memory reference. + 'N': print the second word of a DImode operand. + 'M': print the second word of a TImode operand. + + 'b': print integer X as if it's a unsigned byte. + 'x': print integer X as if it's a unsigned word. + 'h': print integer X as if it's a signed word. */ + + void + print_operand (FILE *file, rtx x, char code) + { + switch (code) + { + case 'C': + output_branch_condition (file, x); + return; + + case 'D': + output_inverse_branch_condition (file, x); + return; + + case 'Y': + fprintf (file, ".LT%X_%X-.", s390_function_count, s390_pool_count); + return; + + case 'y': + fprintf (file, ".LT%X_%X", s390_function_count, s390_pool_count); + return; + + case 'O': + { + struct s390_address ad; + + if (GET_CODE (x) != MEM + || !s390_decompose_address (XEXP (x, 0), &ad, TRUE) + || ad.indx) + abort (); + + if (ad.disp) + s390_output_symbolic_const (file, ad.disp); + else + fprintf (file, "0"); + } + return; + + case 'R': + { + struct s390_address ad; + + if (GET_CODE (x) != MEM + || !s390_decompose_address (XEXP (x, 0), &ad, TRUE) + || ad.indx) + abort (); + + if (ad.base) + fprintf (file, "%s", reg_names[REGNO (ad.base)]); + else + fprintf (file, "0"); + } + return; + + case 'N': + if (GET_CODE (x) == REG) + x = gen_rtx_REG (GET_MODE (x), REGNO (x) + 1); + else if (GET_CODE (x) == MEM) + x = change_address (x, VOIDmode, plus_constant (XEXP (x, 0), 4)); + else + abort (); + break; + + case 'M': + if (GET_CODE (x) == REG) + x = gen_rtx_REG (GET_MODE (x), REGNO (x) + 1); + else if (GET_CODE (x) == MEM) + x = change_address (x, VOIDmode, plus_constant (XEXP (x, 0), 8)); + else + abort (); + break; + } + + switch (GET_CODE (x)) + { + case REG: + fprintf (file, "%s", reg_names[REGNO (x)]); + break; + + case MEM: + output_address (XEXP (x, 0)); + break; + + case CONST: + case CODE_LABEL: + case LABEL_REF: + case SYMBOL_REF: + s390_output_symbolic_const (file, x); + break; + + case CONST_INT: + if (code == 'b') + fprintf (file, "%d", INTVAL (x) & 0xff); + else if (code == 'X') + fprintf (file, "%d", INTVAL (x) & 0xff); + else if (code == 'x') + fprintf (file, "0x%x", INTVAL (x) & 0xffff); + else if (code == 'h') + fprintf (file, "%d", (INTVAL (x) << 16) >> 16); + else + fprintf (file, "%d", INTVAL (x)); + break; + + default: + fatal_insn ("UNKNOWN in print_operand !?", x); + break; + } + } + + #define DEBUG_SCHED 0 + + /* Returns true if register REGNO is used for forming + a memory address in expression X. */ + + static int + reg_used_in_mem_p (int regno, rtx x) + { + enum rtx_code code = GET_CODE (x); + int i, j; + const char *fmt; + + if (code == MEM) + { + if (refers_to_regno_p (regno, regno+1, + XEXP (x, 0), 0)) + return 1; + } + + fmt = GET_RTX_FORMAT (code); + for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) + { + if (fmt[i] == 'e' + && reg_used_in_mem_p (regno, XEXP (x, i))) + return 1; + + else if (fmt[i] == 'E') + for (j = 0; j < XVECLEN (x, i); j++) + if (reg_used_in_mem_p (regno, XVECEXP (x, i, j))) + return 1; + } + return 0; + } + + /* Returns true if expression DEP_RTX sets a address register + used by instruction INSN to address memory. */ + + static int + addr_generation_dependency_p (rtx dep_rtx, rtx insn) + { + rtx target; + + if (GET_CODE (dep_rtx) == SET) + { + target = SET_DEST (dep_rtx); + + if (GET_CODE (target) == REG) + { + int regno = REGNO (target); + + if (get_attr_type (insn) == TYPE_LA) + return refers_to_regno_p (regno, regno+1, + SET_SRC (PATTERN (insn)), 0); + else if (get_attr_atype (insn) == ATYPE_MEM) + return reg_used_in_mem_p (regno, PATTERN (insn)); + } + } + return 0; + } + + + /* Data dependencies are all handled without delay. But if an register + is changed for a memory access, at least 4 cycle need to be put + between the set of the register and the use. Because of that, + the delays specified in the .md file needs to check and adjust + to the right cost. */ + + int + s390_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost) + { + rtx dep_rtx, dest, x; + int i; + + /* If the dependence is an anti-dependence, there is no cost. For an + output dependence, there is sometimes a cost, but it doesn't seem + worth handling those few cases. */ + + if (REG_NOTE_KIND (link) != 0) + return 0; + + /* If we can't recognize the insns, we can't really do anything. */ + if (recog_memoized (insn) < 0 || recog_memoized (dep_insn) < 0) + return cost; + + /* If cost equal 1 nothing needs to be checked. */ + + if (cost == 1) + { + return cost; + } + + dep_rtx = PATTERN (dep_insn); + + if (GET_CODE (dep_rtx) == SET) + { + if (addr_generation_dependency_p (dep_rtx, insn)) + { + if (DEBUG_SCHED) + { + fprintf (stderr, "\n\nAddress dependency detected: cost %d\n", + cost); + debug_rtx (dep_insn); + debug_rtx (insn); + } + return cost; + } + } + + else if (GET_CODE (dep_rtx) == PARALLEL) + { + for (i = 0; i < XVECLEN (dep_rtx, 0); i++) + { + if (addr_generation_dependency_p (XVECEXP (dep_rtx, 0, i), + insn)) + { + if (DEBUG_SCHED) + { + fprintf (stderr, "\n\nAddress dependency detected: cost %d\n" + ,cost); + debug_rtx (dep_insn); + debug_rtx (insn); + } + return cost; + } + } + } + + /* default cost. */ + return 1; + } + + /* Pool concept for Linux 390: + - Function prologue saves used register + - literal pool is dumped in prologue and jump across with bras + - If function has more than 4 k literals, at about every + S390_CHUNK_MAX offset in the function a literal pool will be + dumped + - in this case, a branch from one chunk to other chunk needs + a reload of base register at the code label branched to. */ + + rtx s390_pool_start_insn = NULL_RTX; + + /* Count of actual pool in function (-1 -> before function). */ + + int s390_pool_count = -1; + + static int pool_stop_uid; + + /* Called from the ASM_OUTPUT_POOL_PROLOGUE macro to + prepare for printing a literal pool chunk. */ + + void + s390_asm_output_pool_prologue (FILE *file, char *fname, tree fndecl, int size) + { + + if (s390_pool_count>0) { + /* + * We are in an internal pool, branch over + */ + if (TARGET_64BIT) + { + fprintf (file, "\tlarl\t%s,.LT%X_%X\n", + reg_names[BASE_REGISTER], + s390_function_count, s390_pool_count); + readonly_data_section (); + ASM_OUTPUT_ALIGN (file, floor_log2 (3)); + fprintf (file, ".LT%X_%X:\t# Pool %d\n", + s390_function_count, s390_pool_count, s390_pool_count); + } + else + fprintf (file,"\t.align 4\n\tbras\t%s,0f\n.LT%X_%X:\t# Pool %d \n", + reg_names[BASE_REGISTER], + s390_function_count, s390_pool_count, s390_pool_count); + } + if (!TARGET_64BIT) + function_section (fndecl); + } + + /* Return 1 if OTHER_ADDR is in different chunk than MY_ADDR. + LTORG points to a list of all literal pools inserted + into the current function. */ + + static int + other_chunk (int *ltorg, int my_addr, int other_addr) + { + int ad, i=0, j=0; + + while ((ad = ltorg[i++])) { + if (INSN_ADDRESSES (ad) >= my_addr) + break; + } + + while ((ad = ltorg[j++])) { + if (INSN_ADDRESSES (ad) > other_addr) + break; + } + + if (i==j) + return 0; + + return 1; + } + + /* Return 1 if OTHER_ADDR is too far away from MY_ADDR + to use a relative branch instruction. */ + + static int + far_away (int my_addr, int other_addr) + { + /* In 64 bit mode we can jump +- 4GB. */ + if (TARGET_64BIT) + return 0; + if (abs (my_addr - other_addr) > S390_REL_MAX) + return 1; + return 0; + } + + /* Go through all insns in the current function (starting + at INSN), replacing branch insn if necessary. A branch + needs to be modified if either the distance to the + target is too far to use a relative branch, or if the + target uses a different literal pool than the origin. + LTORG_UIDS points to a list of all literal pool insns + that have been inserted. */ + + static rtx + check_and_change_labels (rtx insn, int *ltorg_uids) + { + rtx temp_reg = gen_rtx_REG (Pmode, RETURN_REGNUM); + rtx target, jump; + rtx pattern, tmp, body, label1; + int addr0, addr1; + + if (GET_CODE (insn) != JUMP_INSN) + return insn; + + pattern = PATTERN (insn); + + addr0 = INSN_ADDRESSES (INSN_UID (insn)); + if (GET_CODE (pattern) == SET) + { + body = XEXP (pattern, 1); + if (GET_CODE (body) == LABEL_REF) + { + addr1 = INSN_ADDRESSES (INSN_UID (XEXP (body, 0))); + + if (other_chunk (ltorg_uids, addr0, addr1)) + { + SYMBOL_REF_USED (XEXP (body, 0)) = 1; + } + if (far_away (addr0, addr1)) + { + if (flag_pic) + { + target = gen_rtx_UNSPEC (SImode, gen_rtvec (1, body), 100); + target = gen_rtx_CONST (SImode, target); + target = force_const_mem (SImode, target); + jump = gen_rtx_REG (Pmode, BASE_REGISTER); + jump = gen_rtx_PLUS (Pmode, jump, temp_reg); + } + else + { + target = force_const_mem (Pmode, body); + jump = temp_reg; + } + + emit_insn_before (gen_movsi (temp_reg, target), insn); + tmp = emit_jump_insn_before (gen_indirect_jump (jump), insn); + remove_insn (insn); + INSN_ADDRESSES_NEW (tmp, -1); + return tmp; + } + } + else if (GET_CODE (body) == IF_THEN_ELSE) + { + if (GET_CODE (XEXP (body, 1)) == LABEL_REF) + { + addr1 = INSN_ADDRESSES (INSN_UID (XEXP (XEXP (body, 1), 0))); + + if (other_chunk (ltorg_uids, addr0, addr1)) + { + SYMBOL_REF_USED (XEXP (XEXP (body, 1), 0)) = 1; + } + + if (far_away (addr0, addr1)) + { + if (flag_pic) + { + target = gen_rtx_UNSPEC (SImode, gen_rtvec (1, XEXP (body, 1)), 100); + target = gen_rtx_CONST (SImode, target); + target = force_const_mem (SImode, target); + jump = gen_rtx_REG (Pmode, BASE_REGISTER); + jump = gen_rtx_PLUS (Pmode, jump, temp_reg); + } + else + { + target = force_const_mem (Pmode, XEXP (body, 1)); + jump = temp_reg; + } + + label1 = gen_label_rtx (); + emit_jump_insn_before (gen_icjump (label1, XEXP (body, 0)), insn); + emit_insn_before (gen_movsi (temp_reg, target), insn); + tmp = emit_jump_insn_before (gen_indirect_jump (jump), insn); + INSN_ADDRESSES_NEW (emit_label_before (label1, insn), -1); + remove_insn (insn); + return tmp; + } + } + else if (GET_CODE (XEXP (body, 2)) == LABEL_REF) + { + addr1 = INSN_ADDRESSES (INSN_UID (XEXP (XEXP (body, 2), 0))); + + if (other_chunk (ltorg_uids, addr0, addr1)) + { + SYMBOL_REF_USED (XEXP (XEXP (body, 2), 0)) = 1; + } + + if (far_away (addr0, addr1)) + { + if (flag_pic) + { + target = gen_rtx_UNSPEC (SImode, gen_rtvec (1, XEXP (body, 2)), 100); + target = gen_rtx_CONST (SImode, target); + target = force_const_mem (SImode, target); + jump = gen_rtx_REG (Pmode, BASE_REGISTER); + jump = gen_rtx_PLUS (Pmode, jump, temp_reg); + } + else + { + target = force_const_mem (Pmode, XEXP (body, 2)); + jump = temp_reg; + } + + label1 = gen_label_rtx (); + emit_jump_insn_before (gen_cjump (label1, XEXP (body, 0)), insn); + emit_insn_before (gen_movsi (temp_reg, target), insn); + tmp = emit_jump_insn_before (gen_indirect_jump (jump), insn); + INSN_ADDRESSES_NEW (emit_label_before (label1, insn), -1); + remove_insn (insn); + return tmp; + } + } + } + } + else if (GET_CODE (pattern) == ADDR_VEC || + GET_CODE (pattern) == ADDR_DIFF_VEC) + { + int i, diff_vec_p = GET_CODE (pattern) == ADDR_DIFF_VEC; + int len = XVECLEN (pattern, diff_vec_p); + + for (i = 0; i < len; i++) + { + addr1 = INSN_ADDRESSES (INSN_UID (XEXP (XVECEXP (pattern, diff_vec_p, i), 0))); + if (other_chunk (ltorg_uids, addr0, addr1)) + { + SYMBOL_REF_USED (XEXP (XVECEXP (pattern, diff_vec_p, i), 0)) = 1; + } + } + } + return insn; + } + + static int chunk_max=0; + + + /* Called from s390_function_prologue to make final adjustments + before outputting code. CHUNKIFY specifies whether we need + to use multiple literal pools (because the total size of the + literals exceeds 4K). */ + + void + s390_final_chunkify (int chunkify) + { + rtx insn, ninsn, tmp; + int addr, naddr, uids; + + const char *asms; + + int size = insn_current_address; + + int *ltorg_uids; + int max_ltorg=0; + + ltorg_uids = alloca (size / 1024 + 1024); + memset (ltorg_uids, 0, size / 1024 + 1024); + + if (chunkify == 1) + { + chunk_max = size * 2048 / get_pool_size (); + chunk_max = chunk_max > S390_CHUNK_MAX + ? S390_CHUNK_MAX : chunk_max; + } + + for (insn=get_insns (); insn;insn = next_real_insn (insn)) + { + if (GET_RTX_CLASS (GET_CODE (insn)) != 'i') + continue; + + addr = INSN_ADDRESSES (INSN_UID (insn)); + if ((ninsn = next_real_insn (insn))) + { + naddr = INSN_ADDRESSES (INSN_UID (ninsn)); + } + + if (chunkify && (addr / chunk_max != naddr / chunk_max)) + { + for (tmp = insn; tmp; tmp = NEXT_INSN (tmp)) + { + if (GET_CODE (tmp) == CODE_LABEL && + GET_CODE (NEXT_INSN (tmp)) != JUMP_INSN) + { + ltorg_uids[max_ltorg++] = INSN_UID (prev_real_insn (tmp)); + break; + } + if (GET_CODE (tmp) == CALL_INSN) + { + ltorg_uids[max_ltorg++] = INSN_UID (tmp); + break; + } + if (INSN_ADDRESSES (INSN_UID (tmp)) - naddr > S390_CHUNK_OV) + { + debug_rtx (insn); + debug_rtx (tmp); + fprintf (stderr, "s390 multiple literalpool support:" + "\n No code label between this insn %X %X", + naddr, INSN_ADDRESSES (INSN_UID (tmp))); + abort (); + } + } + if (tmp == NULL) + { + warning ("no code label found"); + } + } + else if (GET_CODE (PATTERN (insn)) == ASM_INPUT && !TARGET_64BIT) + { + asms = XSTR (PATTERN (insn),0); + + if ((memcmp (asms,".section",8) == 0) || + (memcmp (asms,".text",5) == 0) || + (memcmp (asms,"\t.section",9) == 0) || + (memcmp (asms,"\t.text",6) == 0)) { + ltorg_uids[max_ltorg++] = INSN_UID (insn); + INSN_ADDRESSES_NEW (emit_insn_before (gen_rtx_ASM_INPUT (VOIDmode, + ".align 4"), insn), -1); + } + } + } + ltorg_uids[max_ltorg] = 0; + for (insn=get_insns (),uids=0; insn;insn = next_real_insn (insn)) + { + if (GET_RTX_CLASS (GET_CODE (insn)) != 'i') + continue; + if (INSN_UID (insn) == ltorg_uids[uids]) + { + INSN_ADDRESSES_NEW (emit_insn_after (gen_ltorg ( + gen_rtx_CONST_INT (Pmode, ltorg_uids[++uids])), + insn), -1); + } + if (GET_CODE (insn) == JUMP_INSN) + { + insn = check_and_change_labels (insn, ltorg_uids); + } + } + if (chunkify) + { + for (insn=get_insns (); insn;insn = next_insn (insn)) + { + if (GET_CODE (insn) == CODE_LABEL) + { + if (SYMBOL_REF_USED (insn)) + { + INSN_ADDRESSES_NEW (emit_insn_after (gen_reload_base ( + gen_rtx_LABEL_REF (Pmode, XEXP (insn, 0))), insn), -1); + } + } + } + } + pool_stop_uid = ltorg_uids[0]; + } + + /* Return 1 if next literal pool is reached (check for ltorg insn) + maybe should use unspec insn. */ + + int + s390_stop_dump_lit_p (rtx insn) + { + rtx body=PATTERN (insn); + if (GET_CODE (body) == PARALLEL + && GET_CODE (XVECEXP (body, 0, 0)) == SET + && GET_CODE (XVECEXP (body, 0, 1)) == USE + && GET_CODE (XEXP ((XVECEXP (body, 0, 1)),0)) == CONST_INT + && GET_CODE (SET_DEST (XVECEXP (body, 0, 0))) == REG + && REGNO (SET_DEST (XVECEXP (body, 0, 0))) == BASE_REGISTER + && SET_SRC (XVECEXP (body, 0, 0)) == pc_rtx) { + return 1; + } + else + return 0; + } + + /* Output literal pool chunk to be used for insns + between ACT_INSN and STOP. */ + + void + s390_dump_literal_pool (rtx act_insn, rtx stop) + { + s390_pool_start_insn = act_insn; + pool_stop_uid = INTVAL (stop); + s390_pool_count++; + output_constant_pool (current_function_name, current_function_decl); + function_section (current_function_decl); + } + + + #ifdef DWARF2_DEBUGGING_INFO + extern char *dwarf2out_cfi_label PARAMS ((void)); + #endif + + /* Flag set in prologue, used in epilog to know + if stack is allocated or not. */ + + static int leaf_function_flag; + rtx s390_got_label; + rtx s390_profile[10]; + int s390_nr_constants; + + /* Returns 1 if floating point registers need to be saved. */ + + static int + save_fprs_p () + { + int i; + if (!TARGET_64BIT) + return 0; + for (i=24; i<=31; i++) + { + if (regs_ever_live[i] == 1) + return 1; + } + return 0; + } + + /* Current function is a leaf function, without automatics, + alloca or vararg stuff. */ + + static int + cur_is_leaf_function () + { + int lsize = get_frame_size () + current_function_outgoing_args_size + + save_fprs_p () * 64; + + if (leaf_function_p () && ((lsize) == 0) && + ! (current_function_calls_alloca) && + ! (current_function_stdarg) && ! (current_function_varargs)) + return 1; + return 0; + } + + /* Calculate offset between argument pointer and frame pointer + initialy after prologue. */ + + int + s390_arg_frame_offset () + { + int lsize = get_frame_size () + current_function_outgoing_args_size + + save_fprs_p () * 64; + + if (cur_is_leaf_function ()) + return STACK_POINTER_OFFSET; + else + return 2*STACK_POINTER_OFFSET + lsize; + } + + /* Output code to stdio stream FILE to save floating point + registers on current stack, at offset OFFSET to the frame + pointer register FP. */ + + static int + save_fprs (FILE *file, long offset, int fp) + { + int i; + + if (!TARGET_64BIT) + return 0; + + for (i=24; i<=31; i++) + { + if (regs_ever_live[i] == 1) + { + fprintf (file, "\tstd\t%s,%d(%s)\n", reg_names[i], + (i-24) * 8 + offset, reg_names[fp]); + } + } + } + + /* Output code to stdio stream FILE to restore floating point + registers from current stack, at offset OFFSET to the frame + pointer register FP. */ + + static int + restore_fprs (FILE *file, long offset, int fp) + { + int i; + + if (!TARGET_64BIT) + return 0; + + if (!save_fprs_p ()) + return 0; + + if (offset < 0) + { + fp = 1; + offset = 0; + fprintf (file, "\tlgr\t%s,%s\n", reg_names[fp], + reg_names[STACK_POINTER_REGNUM]); + fprintf (file, "\taghi\t%s,-64\n", reg_names[fp]); + } + + for (i=24; i<=31; i++) + { + if (regs_ever_live[i] == 1) + { + fprintf (file, "\tld\t%s,%d(%s)\n", reg_names[i], + (i-24) * 8 + offset, reg_names[fp]); + } + } + } + + /* Output constant pool in function prologue (31 bit) or in readonly section. */ + + static int + s390_output_constant_pool (FILE* file) + { + /* Output constant pool. */ + if (s390_nr_constants || regs_ever_live[BASE_REGISTER]) + { + s390_pool_count = 0; + if (TARGET_64BIT) + { + fprintf (file, "\tlarl\t%s,.LT%X_%X\n", reg_names[BASE_REGISTER], + s390_function_count, s390_pool_count); + readonly_data_section (); + ASM_OUTPUT_ALIGN (file, floor_log2 (3)); + } + else + { + fprintf (file, "\tbras\t%s,.LTN%X_%X\n", reg_names[BASE_REGISTER], + s390_function_count, s390_pool_count); + } + fprintf (file, ".LT%X_%X:\n", s390_function_count, s390_pool_count); + output_constant_pool (current_function_name, current_function_decl); + fprintf (file, ".LTN%X_%X:\n", s390_function_count, + s390_pool_count); + if (TARGET_64BIT) + function_section (current_function_decl); + + regs_ever_live[BASE_REGISTER] = 1; + } + } + + /* Add constant CTX to the constant pool at a late time + (after the initial pass to count the number of constants + was already done). Returns the resulting constant + pool reference. */ + + static rtx + s390_force_const_mem_late (rtx cst) + { + cst = force_const_mem (Pmode, cst); + + s390_nr_constants++; + regs_ever_live[BASE_REGISTER] = 1; + + emit_insn_before (gen_rtx (USE, Pmode, cst), get_insns ()); + + return cst; + } + + /* Add a reference to the symbol NAME to the constant pool. + FUNC specifies whether NAME refers to a function, while + GLOBAL specifies whether NAME is a global symbol. Depending + on these flags, the appopriate PLT or GOT references are + generated. Returns the constant pool reference. */ + + static rtx + s390_force_const_mem_symbol (char *name, int func, int global) + { + rtx symbol; + + if (TARGET_64BIT) + abort (); + + symbol = gen_rtx (SYMBOL_REF, Pmode, name); + SYMBOL_REF_FLAG (symbol) = !global; + + if (flag_pic) + { + if (global) + { + current_function_uses_pic_offset_table = 1; + symbol = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, symbol), func? 114 : 112); + symbol = gen_rtx_CONST (VOIDmode, symbol); + } + else + { + symbol = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, symbol), 100); + symbol = gen_rtx_CONST (VOIDmode, symbol); + } + } + + return s390_force_const_mem_late (symbol); + } + + /* Output the function prologue assembly code to the + stdio stream FILE. The local frame size is passed + in LSIZE. */ + + int + s390_function_prologue (FILE * file, int lsize) + { + extern int profile_label_no; + int i, j; + long frame_size; + rtx stack_label = 0, got_label = 0, tmp; + char *l; + char b64[2] = " "; + b64[0] = TARGET_64BIT ? 'g' : '\0'; + + /* Check for too large size of local variables */ + + if (lsize > 0x7fff0000) + fatal_error ("Total size of local variables exceeds architecture limit."); + /* Profile code (-p, -a, -ax needs some literals). */ + + if (profile_block_flag && !TARGET_64BIT) + { + s390_profile[0] = s390_force_const_mem_symbol ("__bb_init_func", 1, 1); + s390_profile[1] = s390_force_const_mem_symbol ("__bb_init_trace_func", 1, 1); + s390_profile[2] = s390_force_const_mem_symbol ("__bb_trace_func", 1, 1); + s390_profile[3] = s390_force_const_mem_symbol ("__bb_trace_ret", 1, 1); + s390_profile[5] = s390_force_const_mem_symbol ("__bb", 0, 1); + s390_profile[6] = s390_force_const_mem_symbol (".LPBX0", 0, 0); + s390_profile[7] = s390_force_const_mem_symbol (".LPBX2", 0, 0); + } + + if (profile_flag && !TARGET_64BIT) + { + static char label[128]; + sprintf (label, "%sP%d", LPREFIX, profile_label_no); + + s390_profile[4] = s390_force_const_mem_symbol ("_mcount", 1, 1); + s390_profile[9] = s390_force_const_mem_symbol (label, 0, 0); + } + + if (get_pool_size () > S390_POOL_MAX) + s390_final_chunkify (1); + else + s390_final_chunkify (0); + + if (current_function_uses_pic_offset_table) + regs_ever_live[12] = 1; + + if (!TARGET_64BIT && current_function_uses_pic_offset_table) + { + got_label = s390_force_const_mem_symbol ("_GLOBAL_OFFSET_TABLE_", 0, 0); + } + + if ((frame_size = + STARTING_FRAME_OFFSET + lsize + save_fprs_p () * 64) > 0x7fff) + { + stack_label = s390_force_const_mem_late (GEN_INT (frame_size)); + } + + if (!optimize) + { + /* Stupid register allocation is stupid ... + It does not always recognize the base register is used. */ + + regs_ever_live[BASE_REGISTER] = 1; + } + + if (cur_is_leaf_function ()) + { + leaf_function_flag = 1; + fprintf (file, "%s\tleaf function\n", ASM_COMMENT_START); + fprintf (file, "%s\thas varargs %d\n", ASM_COMMENT_START, + current_function_stdarg); + fprintf (file, "%s\tincoming args (stack) %d\n", ASM_COMMENT_START, + current_function_args_size); + fprintf (file, "%s\tfunction length %d\n", ASM_COMMENT_START, + insn_current_address); + fprintf (file, "%s\tregister live ", ASM_COMMENT_START); + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + fprintf (file, "%d", regs_ever_live[i]); + fputc ('\n',file); + + /* Save gprs 6 - 15 and fprs 4 and 6. */ + for (i = 6; i < 13 && (regs_ever_live[i] == 0); i++); + + if (s390_nr_constants || regs_ever_live[13] || i != 13) + { + fprintf (file, "\tstm%s\t%s,%s,%d(%s)\n", + b64, reg_names[i], reg_names[13], + i * UNITS_PER_WORD, + reg_names[STACK_POINTER_REGNUM]); + #ifdef INCOMING_RETURN_ADDR_RTX + if (dwarf2out_do_frame ()) + { + l = dwarf2out_cfi_label (); + dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, + STACK_POINTER_OFFSET); + for (j = i; j <= 14; j++) + dwarf2out_reg_save (l, j, (TARGET_64BIT ? (j-20) : (j-24)) + * UNITS_PER_WORD); + if (regs_ever_live[18]) + dwarf2out_reg_save (l, 18, -16); + if (regs_ever_live[19]) + dwarf2out_reg_save (l, 19, -8); + } + #endif + } + + s390_output_constant_pool (file); + + /* Save fprs. */ + + if (!TARGET_64BIT) + { + if (regs_ever_live[18]) + fprintf (file, "\tstd\t4,80(%s)\n", reg_names[STACK_POINTER_REGNUM]); + if (regs_ever_live[19]) + fprintf (file, "\tstd\t6,88(%s)\n", reg_names[STACK_POINTER_REGNUM]); + } + } + else + { /* No leaf function. */ + fprintf (file, "%s\tleaf function %d\n", ASM_COMMENT_START, + leaf_function_p ()); + fprintf (file, "%s\tautomatics %d\n", ASM_COMMENT_START, + lsize); + fprintf (file, "%s\toutgoing args %d\n", ASM_COMMENT_START, + current_function_outgoing_args_size); + fprintf (file, "%s\tneed frame pointer %d\n", ASM_COMMENT_START, + frame_pointer_needed); + fprintf (file, "%s\tcall alloca %d\n", ASM_COMMENT_START, + current_function_calls_alloca); + fprintf (file, "%s\thas varargs %d\n", ASM_COMMENT_START, + current_function_stdarg || current_function_varargs); + fprintf (file, "%s\tincoming args (stack) %d\n", ASM_COMMENT_START, + current_function_args_size); + fprintf (file, "%s\tfunction length %d\n", ASM_COMMENT_START, + insn_current_address); + fprintf (file, "%s\tregister live ", ASM_COMMENT_START); + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + fprintf (file, "%d", regs_ever_live[i]); + fputc ('\n',file); + + /* Save gprs 6 - 15 and fprs 4 and 6. */ + + if (current_function_stdarg || current_function_varargs) + { + i = 2; + } + else + { + for (i = 6; i < 13 && (regs_ever_live[i] == 0); i++); + } + + fprintf (file, "\tstm%s\t%s,%s,%d(%s)\n", + b64, reg_names[i], reg_names[15], i * UNITS_PER_WORD, + reg_names[STACK_POINTER_REGNUM]); + + #ifdef INCOMING_RETURN_ADDR_RTX + if (dwarf2out_do_frame ()) + { + l = dwarf2out_cfi_label (); + dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, STACK_POINTER_OFFSET); + for (j = i; j <= 15; j++) + dwarf2out_reg_save (l, j, (TARGET_64BIT ? (j-20) : (j-24)) * + UNITS_PER_WORD); + if (regs_ever_live[18]) + dwarf2out_reg_save (l, 18, -16); + if (regs_ever_live[19]) + dwarf2out_reg_save (l, 19, -8); + } + #endif + + s390_output_constant_pool (file); + + /* Save fprs. */ + + if (current_function_stdarg || current_function_varargs) + { + fprintf (file, "\tstd\t%s,%d(%s)\n", + reg_names[16], + STACK_POINTER_OFFSET-32, + reg_names[STACK_POINTER_REGNUM]); + fprintf (file, "\tstd\t%s,%d(%s)\n", + reg_names[17], + STACK_POINTER_OFFSET-24, + reg_names[STACK_POINTER_REGNUM]); + if (TARGET_64BIT) + { + fprintf (file, "\tstd\t%s,%d(%s)\n", + reg_names[18], + STACK_POINTER_OFFSET-16, + reg_names[STACK_POINTER_REGNUM]); + fprintf (file, "\tstd\t%s,%d(%s)\n", + reg_names[19], + STACK_POINTER_OFFSET-8, + reg_names[STACK_POINTER_REGNUM]); + } + } + if (!TARGET_64BIT) + { + if (regs_ever_live[18]) + fprintf (file, "\tstd\t%s,%d(%s)\n", + reg_names[18], + STACK_POINTER_OFFSET-16, + reg_names[STACK_POINTER_REGNUM]); + if (regs_ever_live[19]) + fprintf (file, "\tstd\t%s,%d(%s)\n", + reg_names[19], + STACK_POINTER_OFFSET-8, + reg_names[STACK_POINTER_REGNUM]); + } + + + if (save_fprs_p () && frame_size > 4095) + { + int fp = 1; + int offset = 0; + fprintf (file, "\tlgr\t%s,%s\n", reg_names[fp], + reg_names[STACK_POINTER_REGNUM]); + fprintf (file, "\taghi\t%s,-64\n", reg_names[fp]); + save_fprs (file, 0, fp); + } + + /* Decrement stack. */ + + if (TARGET_BACKCHAIN || (STARTING_FRAME_OFFSET + + lsize + STACK_POINTER_OFFSET > 4095 + || frame_pointer_needed + || current_function_calls_alloca)) + { + + fprintf (file, "\tl%sr\t%s,%s\n", b64, + reg_names[1], reg_names[STACK_POINTER_REGNUM]); + } + + if (stack_label) + { + rtx operands[2]; + + operands[0] = stack_pointer_rtx; + operands[1] = stack_label; + if (TARGET_64BIT) + output_asm_insn ("sg\t%0,%1", operands); + else + output_asm_insn ("s\t%0,%1", operands); + } + else + { + fprintf (file, "\ta%shi\t%s,-%d\n",b64, + reg_names[STACK_POINTER_REGNUM], frame_size); + } + #ifdef INCOMING_RETURN_ADDR_RTX + if (dwarf2out_do_frame ()) + { + if (frame_pointer_needed) + dwarf2out_def_cfa ("", HARD_FRAME_POINTER_REGNUM, + STACK_POINTER_OFFSET+frame_size); + else + dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, + STACK_POINTER_OFFSET+frame_size); + } + #endif + + + /* Generate backchain. */ + + if (TARGET_BACKCHAIN || (STARTING_FRAME_OFFSET + + lsize + STACK_POINTER_OFFSET > 4095 + || frame_pointer_needed + || current_function_calls_alloca)) + { + fprintf (file, "\tst%s\t%s,0(%s)\n", + b64, reg_names[1], reg_names[STACK_POINTER_REGNUM]); + } + } + + if (frame_pointer_needed) + { + fprintf (file, "\tl%sr\t%s,%s\n", b64, + reg_names[FRAME_POINTER_REGNUM], + reg_names[STACK_POINTER_REGNUM]); + } + + /* Load GOT if used and emit use insn that optimizer does not + erase literal pool entry. */ + + if (current_function_uses_pic_offset_table) + { + rtx operands[3]; + if (TARGET_64BIT) + { + fprintf (file, "\tlarl\t%s,_GLOBAL_OFFSET_TABLE_\n", + reg_names[PIC_OFFSET_TABLE_REGNUM]); + } + else + { + operands[0] = gen_rtx (REG, Pmode, PIC_OFFSET_TABLE_REGNUM); + operands[1] = got_label; + operands[2] = gen_rtx (REG, Pmode, BASE_REGISTER); + output_asm_insn ("l\t%0,%1\n\tar\t%0,%2", operands); + } + } + /* Save FPRs below save area. */ + + if (frame_size <= 4095) + save_fprs (file, frame_size - 64, STACK_POINTER_REGNUM); + + return 0; + } + + /* Output the function epilogue assembly code to the + stdio stream FILE. The local frame size is passed + in LSIZE. */ + + int + s390_function_epilogue (FILE * file, int lsize) + { + /* Register is call clobbered and not used for eh or return. */ + #define FREE_REG 4 + + int i; + long frame_size; + int return_reg = RETURN_REGNUM; + int fp, offset; + char b64[2] = " "; + + b64[0] = TARGET_64BIT ? 'g' : '\0'; + frame_size = STARTING_FRAME_OFFSET + lsize + save_fprs_p () * 64; + + if (current_function_uses_pic_offset_table) + regs_ever_live[PIC_OFFSET_TABLE_REGNUM] = 1; + + if (leaf_function_flag) + { + for (i = 6; i < 13 && (regs_ever_live[i] == 0); i++); + + if (s390_nr_constants || regs_ever_live[13] || i != 13) + { + fprintf (file, "\tlm%s\t%s,%s,%d(%s)\n", b64, + reg_names[i], reg_names[13], + UNITS_PER_WORD * i, + reg_names[STACK_POINTER_REGNUM]); + } + if (!TARGET_64BIT) + { + if (regs_ever_live[18]) + fprintf (file, "\tld\t%s,%d(%s)\n", + reg_names[18], + STACK_POINTER_OFFSET-16, + reg_names[STACK_POINTER_REGNUM]); + if (regs_ever_live[19]) + fprintf (file, "\tld\t%s,%d(%s)\n", + reg_names[19], + STACK_POINTER_OFFSET-8, + reg_names[STACK_POINTER_REGNUM]); + } + } + else + { + for (i = 6; i < 13 && (regs_ever_live[i] == 0); i++); + + if (frame_size + STACK_POINTER_OFFSET > 4095) + { + offset = 0; + fp = STACK_POINTER_REGNUM; + } + else if (frame_pointer_needed || current_function_calls_alloca) + { + offset = frame_size; + fp = FRAME_POINTER_REGNUM; + } + else + { + offset = frame_size; + fp = STACK_POINTER_REGNUM; + } + + /* Restore from offset below save area. */ + + if (offset == 0) + fprintf (file, "\tl%s\t%s,0(%s)\n", b64, + reg_names[fp], reg_names[fp]); + restore_fprs (file, offset-64, fp); + return_reg = FREE_REG; + fprintf (file, "\tl%s\t%s,%d(%s)\n", b64, reg_names[return_reg], + UNITS_PER_WORD*RETURN_REGNUM+offset, reg_names[fp]); + if (!TARGET_64BIT) + { + if (regs_ever_live[18]) + fprintf (file, "\tld\t%s,%d(%s)\n", + reg_names[18], + offset+STACK_POINTER_OFFSET-16, reg_names[fp]); + if (regs_ever_live[19]) + fprintf (file, "\tld\t%s,%d(%s)\n", + reg_names[19], + offset+STACK_POINTER_OFFSET-8, reg_names[fp]); + } + fprintf (file, "\tlm%s\t%s,%s,%d(%s)\n", b64, + reg_names[i], reg_names[15], + (UNITS_PER_WORD * i) + offset, reg_names[fp]); + } + + fprintf (file, "\tbr\t%s\n", reg_names[return_reg]); + + current_function_uses_pic_offset_table = 0; + leaf_function_flag = 0; + s390_pool_start_insn = NULL_RTX; + s390_pool_count = -1; + s390_function_count++; + return 0; + } + + /* This is epilogue code, maybe should use generic in except.c. */ + + void + s390_expand_eh_epilogue (rtx reg1, rtx reg2, rtx reg3) + { + abort (); + } + + + /* Return the size in bytes of a function argument of + type TYPE and/or mode MODE. At least one of TYPE or + MODE must be specified. */ + + static int + s390_function_arg_size (enum machine_mode mode, tree type) + { + if (type) + return int_size_in_bytes (type); + + /* No type info available for some library calls ... */ + if (mode != BLKmode) + return GET_MODE_SIZE (mode); + + /* If we have neither type nor mode, abort */ + abort (); + } + + /* Return 1 if a function argument of type TYPE and mode MODE + is to be passed by reference. The ABI specifies that only + structures of size 1, 2, 4, or 8 bytes are passed by value, + all other structures (and complex numbers) are passed by + reference. */ + + int + s390_function_arg_pass_by_reference (enum machine_mode mode, tree type) + { + int size = s390_function_arg_size (mode, type); + + if (type) + { + if (AGGREGATE_TYPE_P (type) && + size != 1 && size != 2 && size != 4 && size != 8) + return 1; + + if (TREE_CODE (type) == COMPLEX_TYPE) + return 1; + } + return 0; + + } + + /* Update the data in CUM to advance over an argument of mode MODE and + data type TYPE. (TYPE is null for libcalls where that information + may not be available.). */ + + void + s390_function_arg_advance (CUMULATIVE_ARGS * cum, + enum machine_mode mode, tree type, int named) + { + if (! TARGET_SOFT_FLOAT && (mode == DFmode || mode == SFmode)) + { + cum->fprs++; + } + else if (s390_function_arg_pass_by_reference (mode, type)) + { + cum->gprs += 1; + } + else + { + int size = s390_function_arg_size (mode, type); + cum->gprs += ((size + UNITS_PER_WORD-1) / UNITS_PER_WORD); + } + } + + /* Define where to put the arguments to a function. + Value is zero to push the argument on the stack, + or a hard register in which to store the argument. + + MODE is the argument's machine mode. + TYPE is the data type of the argument (as a tree). + This is null for libcalls where that information may + not be available. + CUM is a variable of type CUMULATIVE_ARGS which gives info about + the preceding args and about the function being called. + NAMED is nonzero if this argument is a named parameter + (otherwise it is an extra parameter matching an ellipsis). + + 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. */ + + rtx + s390_function_arg (CUMULATIVE_ARGS * cum, + enum machine_mode mode, tree type, int named) + { + if (s390_function_arg_pass_by_reference (mode, type)) + return 0; + + if (! TARGET_SOFT_FLOAT && (mode == DFmode || mode == SFmode)) + { + if (cum->fprs + 1 > (TARGET_64BIT? 4 : 2)) + return 0; + else + return gen_rtx (REG, mode, cum->fprs + 16); + } + else + { + int size = s390_function_arg_size (mode, type); + int n_gprs = (size + UNITS_PER_WORD-1) / UNITS_PER_WORD; + + if (cum->gprs + n_gprs > 5) + return 0; + else + return gen_rtx (REG, mode, cum->gprs + 2); + } + } + + + /* Create the va_list datatype. + + On S/390, va_list is a structure of four elements: + + __gpr: number of general purpose registers used for arguments + __fpr: number of floating point registers used for arguments + __overflow_arg_area: + address of area holding arguments that are not + passed in a register + __reg_save_area: + address of register save area; the function prologue + saves all registers used for argument passing into this + area, if the function uses variable arguments. */ + + tree + s390_build_va_list () + { + tree f_gpr, f_fpr, f_ovf, f_sav, record, type_decl; + + record = make_lang_type (RECORD_TYPE); + + type_decl = + build_decl (TYPE_DECL, get_identifier ("__va_list_tag"), record); + + f_gpr = build_decl (FIELD_DECL, get_identifier ("__gpr"), + long_integer_type_node); + f_fpr = build_decl (FIELD_DECL, get_identifier ("__fpr"), + long_integer_type_node); + f_ovf = build_decl (FIELD_DECL, get_identifier ("__overflow_arg_area"), + ptr_type_node); + f_sav = build_decl (FIELD_DECL, get_identifier ("__reg_save_area"), + ptr_type_node); + + DECL_FIELD_CONTEXT (f_gpr) = record; + DECL_FIELD_CONTEXT (f_fpr) = record; + DECL_FIELD_CONTEXT (f_ovf) = record; + DECL_FIELD_CONTEXT (f_sav) = record; + + TREE_CHAIN (record) = type_decl; + TYPE_NAME (record) = type_decl; + TYPE_FIELDS (record) = f_gpr; + TREE_CHAIN (f_gpr) = f_fpr; + TREE_CHAIN (f_fpr) = f_ovf; + TREE_CHAIN (f_ovf) = f_sav; + + layout_type (record); + + /* The correct type is an array type of one element. */ + return build_array_type (record, build_index_type (size_zero_node)); + } + + /* Implement va_start. + + The following global variables are used to initalize + the va_list structure: + + current_function_args_info: + holds number of gprs and fprs used for arguments. + current_function_arg_offset_rtx: + holds the offset to the overflow argument area on the stack + (relative to the virtual arg pointer). */ + + void + s390_va_start (int stdarg_p, tree valist, rtx nextarg) + { + HOST_WIDE_INT n_gpr, n_fpr; + int off; + tree f_gpr, f_fpr, f_ovf, f_sav; + tree gpr, fpr, ovf, sav, t; + + f_gpr = TYPE_FIELDS (TREE_TYPE (va_list_type_node)); + f_fpr = TREE_CHAIN (f_gpr); + f_ovf = TREE_CHAIN (f_fpr); + f_sav = TREE_CHAIN (f_ovf); + + valist = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (valist)), valist); + gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr); + fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr); + ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf); + sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav); + + /* Count number of gp and fp argument registers used. */ + + n_gpr = current_function_args_info.gprs; + n_fpr = current_function_args_info.fprs; + + t = build (MODIFY_EXPR, TREE_TYPE (gpr), gpr, build_int_2 (n_gpr, 0)); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + t = build (MODIFY_EXPR, TREE_TYPE (fpr), fpr, build_int_2 (n_fpr, 0)); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + /* Find the overflow area. */ + t = make_tree (TREE_TYPE (ovf), virtual_incoming_args_rtx); + + off = INTVAL (current_function_arg_offset_rtx); + off = off < 0 ? 0 : off; + if (! stdarg_p) + off = off > 0 ? off - UNITS_PER_WORD : off; + if (TARGET_DEBUG_ARG) + fprintf (stderr, "va_start: n_gpr = %d, n_fpr = %d off %d\n", + n_gpr, n_fpr, off); + + t = build (PLUS_EXPR, TREE_TYPE (ovf), t, build_int_2 (off, 0)); + + t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + /* Find the register save area. */ + t = make_tree (TREE_TYPE (sav), virtual_incoming_args_rtx); + t = build (PLUS_EXPR, TREE_TYPE (sav), t, + build_int_2 (-STACK_POINTER_OFFSET, -1)); + t = build (MODIFY_EXPR, TREE_TYPE (sav), sav, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + } + + /* Implement va_arg. + + Generates code equivalent to: + + if (integral value) { + if (size <= 4 && args.gpr < 5 || + size > 4 && args.gpr < 4 ) + ret = args.reg_save_area[args.gpr+8] + else + ret = *args.overflow_arg_area++; + } else if (float value) { + if (args.fgpr < 2) + ret = args.reg_save_area[args.fpr+64] + else + ret = *args.overflow_arg_area++; + } else if (aggregate value) { + if (args.gpr < 5) + ret = *args.reg_save_area[args.gpr] + else + ret = **args.overflow_arg_area++; + } */ + + rtx + s390_va_arg (tree valist, tree type) + { + tree f_gpr, f_fpr, f_ovf, f_sav; + tree gpr, fpr, ovf, sav, reg, t, u; + int indirect_p, size, n_reg, sav_ofs, sav_scale, max_reg; + rtx lab_false, lab_over, addr_rtx, r; + + f_gpr = TYPE_FIELDS (TREE_TYPE (va_list_type_node)); + f_fpr = TREE_CHAIN (f_gpr); + f_ovf = TREE_CHAIN (f_fpr); + f_sav = TREE_CHAIN (f_ovf); + + valist = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (valist)), valist); + gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr); + fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr); + ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf); + sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav); + + size = int_size_in_bytes (type); + + if (s390_function_arg_pass_by_reference (TYPE_MODE (type), type)) + { + if (TARGET_DEBUG_ARG) + { + fprintf (stderr, "va_arg: aggregate type"); + debug_tree (type); + } + + /* Aggregates are passed by reference. */ + indirect_p = 1; + reg = gpr; + n_reg = 1; + sav_ofs = 2 * UNITS_PER_WORD; + sav_scale = UNITS_PER_WORD; + size = UNITS_PER_WORD; + max_reg = 4; + } + else if (FLOAT_TYPE_P (type) && ! TARGET_SOFT_FLOAT) + { + if (TARGET_DEBUG_ARG) + { + fprintf (stderr, "va_arg: float type"); + debug_tree (type); + } + + /* FP args go in FP registers, if present. */ + indirect_p = 0; + reg = fpr; + n_reg = 1; + sav_ofs = 16 * UNITS_PER_WORD; + sav_scale = 8; + /* TARGET_64BIT has up to 4 parameter in fprs */ + max_reg = TARGET_64BIT ? 3 : 1; + } + else + { + if (TARGET_DEBUG_ARG) + { + fprintf (stderr, "va_arg: other type"); + debug_tree (type); + } + + /* 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 (TARGET_64BIT) + sav_ofs += TYPE_MODE (type) == SImode ? 4 : + TYPE_MODE (type) == HImode ? 6 : + TYPE_MODE (type) == QImode ? 7 : 0; + else + sav_ofs += TYPE_MODE (type) == HImode ? 2 : + TYPE_MODE (type) == QImode ? 3 : 0; + + sav_scale = UNITS_PER_WORD; + if (n_reg > 1) + max_reg = 3; + else + max_reg = 4; + } + + /* Pull the value out of the saved registers ... */ + + lab_false = gen_label_rtx (); + lab_over = gen_label_rtx (); + addr_rtx = gen_reg_rtx (Pmode); + + emit_cmp_and_jump_insns (expand_expr (reg, NULL_RTX, Pmode, EXPAND_NORMAL), + GEN_INT (max_reg), + GT, const1_rtx, Pmode, 0, 1, lab_false); + + if (sav_ofs) + t = build (PLUS_EXPR, ptr_type_node, sav, build_int_2 (sav_ofs, 0)); + else + t = sav; + + u = build (MULT_EXPR, long_integer_type_node, + reg, build_int_2 (sav_scale, 0)); + TREE_SIDE_EFFECTS (u) = 1; + + t = build (PLUS_EXPR, ptr_type_node, t, u); + TREE_SIDE_EFFECTS (t) = 1; + + r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); + if (r != addr_rtx) + emit_move_insn (addr_rtx, r); + + + emit_jump_insn (gen_jump (lab_over)); + emit_barrier (); + emit_label (lab_false); + + /* ... Otherwise out of the overflow area. */ + + t = save_expr (ovf); + + + /* In 64 BIT for each argument on stack, a full 64 bit slot is allocated. */ + if (size < UNITS_PER_WORD) + { + t = build (PLUS_EXPR, TREE_TYPE (t), t, build_int_2 (UNITS_PER_WORD-size, 0)); + t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + t = save_expr (ovf); + } + + r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); + if (r != addr_rtx) + emit_move_insn (addr_rtx, r); + + t = build (PLUS_EXPR, TREE_TYPE (t), t, build_int_2 (size, 0)); + t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + emit_label (lab_over); + + /* If less than max_regs a registers are retrieved out + of register save area, increment. */ + + u = build (PREINCREMENT_EXPR, TREE_TYPE (reg), reg, + build_int_2 (n_reg, 0)); + TREE_SIDE_EFFECTS (u) = 1; + expand_expr (u, const0_rtx, VOIDmode, EXPAND_NORMAL); + + if (indirect_p) + { + r = gen_rtx_MEM (Pmode, addr_rtx); + MEM_ALIAS_SET (r) = get_varargs_alias_set (); + emit_move_insn (addr_rtx, r); + } + + + return addr_rtx; + } + + /* Do what is necessary for `va_start'. The argument is ignored; + we look at the current function to determine if stdarg or varargs + is used. */ + + rtx + s390_builtin_saveregs (arglist) + tree arglist ATTRIBUTE_UNUSED; + { + rtx off, block, dest, tmp; + tree fntype = TREE_TYPE (current_function_decl); + + int stdarg = (TYPE_ARG_TYPES (fntype) != 0 + && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) + != void_type_node)); + + /* Allocate the va_list block. */ + + block = assign_stack_local (BLKmode, 4 * UNITS_PER_WORD, BITS_PER_WORD); + RTX_UNCHANGING_P (block) = 1; + RTX_UNCHANGING_P (XEXP (block, 0)) = 1; + + /* Store the # of named gpr and fpr in 1st and 2nd word of va_list. */ + + dest = change_address (block, ptr_mode, + plus_constant (XEXP (block, 0), 0)); + emit_move_insn (dest, GEN_INT (current_function_args_info.gprs)); + dest = change_address (block, ptr_mode, + plus_constant (XEXP (block, 0), UNITS_PER_WORD)); + emit_move_insn (dest, GEN_INT (current_function_args_info.fprs)); + + /* Store the address of the overflow area in 3rd word of va_list. */ + + if (stdarg) + off = current_function_arg_offset_rtx; + else + { + if (GET_CODE (current_function_arg_offset_rtx) != CONST_INT) + { + debug_rtx (current_function_arg_offset_rtx); + abort (); + } + + if (INTVAL (current_function_arg_offset_rtx) != 0) + off = gen_rtx_CONST_INT (Pmode, + INTVAL (current_function_arg_offset_rtx)- + UNITS_PER_WORD); + else + off = current_function_arg_offset_rtx; + } + + dest = change_address (block, ptr_mode, + plus_constant (XEXP (block, 0), + 2 * UNITS_PER_WORD)); + + tmp = expand_binop (Pmode, add_optab, virtual_incoming_args_rtx, + off, + dest, 0, OPTAB_WIDEN); + if (tmp != dest) + emit_move_insn (dest, tmp); + + /* Store the address of the register save area in 4th word of va_list. */ + + dest = change_address (block, ptr_mode, + plus_constant (XEXP (block, 0), + 3 * UNITS_PER_WORD)); + + tmp = expand_binop (Pmode, add_optab, virtual_incoming_args_rtx, + GEN_INT (-STACK_POINTER_OFFSET), + dest, 0, OPTAB_WIDEN); + if (tmp != dest) + emit_move_insn (dest, tmp); + + /* Return the address of the va_list block. */ + + return XEXP (block, 0); + } + + + /* Output assembly code for the trampoline template to + stdio stream FILE. + + On S/390, we use gpr 1 internally in the trampoline code; + gpr 0 is used to hold the static chain. */ + + void + s390_trampoline_template (FILE * file) + { + if (TARGET_64BIT) + { + fprintf (file, "larl\t%s,0f\n", reg_names[1]); + fprintf (file, "lg\t%s,0(%s)\n", reg_names[0], reg_names[1]); + fprintf (file, "lg\t%s,8(%s)\n", reg_names[1], reg_names[1]); + fprintf (file, "br\t%s\n", reg_names[1]); + fprintf (file, "0:\t.quad\t0\n"); + fprintf (file, ".quad\t0\n"); + } + else + { + fprintf (file, "basr\t%s,0\n", reg_names[1]); + fprintf (file, "l\t%s,10(%s)\n", reg_names[0], reg_names[1]); + fprintf (file, "l\t%s,14(%s)\n", reg_names[1], reg_names[1]); + fprintf (file, "br\t%s\n", reg_names[1]); + fprintf (file, ".long\t0\n"); + fprintf (file, ".long\t0\n"); + } + } + + /* Emit RTL insns to initialize the variable parts of a trampoline. + FNADDR is an RTX for the address of the function's pure code. + CXT is an RTX for the static chain value for the function. */ + + void + s390_initialize_trampoline (addr, fnaddr, cxt) + rtx addr; + rtx fnaddr; + rtx cxt; + { + emit_move_insn (gen_rtx + (MEM, Pmode, + memory_address (Pmode, + plus_constant (addr, (TARGET_64BIT ? 20 : 12) ))), cxt); + emit_move_insn (gen_rtx + (MEM, Pmode, + memory_address (Pmode, + plus_constant (addr, (TARGET_64BIT ? 28 : 16) ))), fnaddr); + } diff -Nrc3pad gcc-3.0/gcc/config/s390/s390.h gcc-3.0.1/gcc/config/s390/s390.h *** gcc-3.0/gcc/config/s390/s390.h Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/s390/s390.h Fri Aug 10 15:19:19 2001 *************** *** 0 **** --- 1,1881 ---- + /* Definitions of target machine for GNU compiler, for IBM S/390 + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Hartmut Penner (hpenner@de.ibm.com) and + Ulrich Weigand (uweigand@de.ibm.com). + This file is part of GNU CC. + + GNU CC 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 2, or (at your option) + any later version. + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef _S390_H + #define _S390_H + + #define TARGET_VERSION fprintf (stderr, " (S/390)"); + + extern int flag_pic; + + /* Run-time compilation parameters selecting different hardware subsets. */ + + extern int target_flags; + + /* Target macros checked at runtime of compiler. */ + + #define TARGET_HARD_FLOAT (target_flags & 1) + #define TARGET_BACKCHAIN (target_flags & 2) + #define TARGET_SMALL_EXEC (target_flags & 4) + #define TARGET_DEBUG_ARG (target_flags & 8) + #define TARGET_64BIT (target_flags & 16) + #define TARGET_MVCLE (target_flags & 32) + + #define TARGET_DEFAULT 0x3 + #define TARGET_SOFT_FLOAT (!(target_flags & 1)) + + /* Macro to define tables used to set the flags. This is a list in braces + of pairs in braces, each pair being { "NAME", VALUE } + where VALUE is the bits to set or minus the bits to clear. + An empty string NAME is used to identify the default VALUE. */ + + #define TARGET_SWITCHES \ + { { "hard-float", 1, N_("Use hardware fp")}, \ + { "soft-float", -1, N_("Don't use hardware fp")}, \ + { "backchain", 2, N_("Set backchain")}, \ + { "no-backchain", -2, N_("Don't set backchain (faster, but debug harder")}, \ + { "small-exec", 4, N_("Use bras for execucable < 64k")}, \ + { "no-small-exec",-4, N_("Don't use bras")}, \ + { "debug", 8, N_("Additional debug prints")}, \ + { "no-debug", -8, N_("Don't print additional debug prints")}, \ + { "64", 16, N_("64 bit mode")}, \ + { "31", -16, N_("31 bit mode")}, \ + { "mvcle", 32, N_("mvcle use")}, \ + { "no-mvcle", -32, N_("mvc&ex")}, \ + { "", TARGET_DEFAULT, 0 } } + + /* Define this to change the optimizations performed by default. */ + #define OPTIMIZATION_OPTIONS(LEVEL, SIZE) optimization_options(LEVEL, SIZE) + + /* Defines for REAL_ARITHMETIC. */ + #define IEEE_FLOAT 1 + #define TARGET_IBM_FLOAT 0 + #define TARGET_IEEE_FLOAT 1 + + /* The current function count for create unique internal labels. */ + + extern int s390_function_count; + + /* The amount of space used for outgoing arguments. */ + + extern int current_function_outgoing_args_size; + + /* Target machine storage layout. */ + + /* Define this if most significant bit is lowest numbered in instructions + that operate on numbered bit-fields. */ + + #define BITS_BIG_ENDIAN 1 + + /* Define this if most significant byte of a word is the lowest numbered. */ + + #define BYTES_BIG_ENDIAN 1 + + /* Define this if MS word of a multiword is the lowest numbered. */ + + #define WORDS_BIG_ENDIAN 1 + + /* Number of bits in an addressable storage unit. */ + + #define BITS_PER_UNIT 8 + + /* Width in bits of a "word", which is the contents of a machine register. */ + + #define BITS_PER_WORD (TARGET_64BIT ? 64 : 32) + #define MAX_BITS_PER_WORD 64 + + /* Width of a word, in units (bytes). */ + + #define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4) + #define MIN_UNITS_PER_WORD 4 + + /* Width in bits of a pointer. See also the macro `Pmode' defined below. */ + + #define POINTER_SIZE (TARGET_64BIT ? 64 : 32) + + /* A C expression for the size in bits of the type `short' on the + target machine. If you don't define this, the default is half a + word. (If this would be less than one storage unit, it is + rounded up to one unit.) */ + #define SHORT_TYPE_SIZE 16 + + /* A C expression for the size in bits of the type `int' on the + target machine. If you don't define this, the default is one + word. */ + #define INT_TYPE_SIZE 32 + + /* A C expression for the size in bits of the type `long' on the + target machine. If you don't define this, the default is one + word. */ + #define LONG_TYPE_SIZE (TARGET_64BIT ? 64 : 32) + #define MAX_LONG_TYPE_SIZE 64 + + /* A C expression for the size in bits of the type `long long' on the + target machine. If you don't define this, the default is two + words. */ + #define LONG_LONG_TYPE_SIZE 64 + + /* Right now we only support two floating point formats, the + 32 and 64 bit ieee formats. */ + + #define FLOAT_TYPE_SIZE 32 + #define DOUBLE_TYPE_SIZE 64 + #define LONG_DOUBLE_TYPE_SIZE 64 + + /* Define this macro if it is advisable to hold scalars in registers + in a wider mode than that declared by the program. In such cases, + the value is constrained to be within the bounds of the declared + type, but kept valid in the wider mode. The signedness of the + extension may differ from that of the type. */ + + #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ + if (INTEGRAL_MODE_P (MODE) && \ + GET_MODE_SIZE (MODE) < UNITS_PER_WORD) { \ + (MODE) = Pmode; \ + } + + /* Defining PROMOTE_FUNCTION_ARGS eliminates some unnecessary zero/sign + extensions applied to char/short functions arguments. Defining + PROMOTE_FUNCTION_RETURN does the same for function returns. */ + + #define PROMOTE_FUNCTION_ARGS + #define PROMOTE_FUNCTION_RETURN + #define PROMOTE_FOR_CALL_ONLY + + /* Allocation boundary (in *bits*) for storing pointers in memory. */ + + #define POINTER_BOUNDARY 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 + + /* Allocation boundary (in *bits*) for the code of a function. */ + + #define FUNCTION_BOUNDARY 32 + + /* There is no point aligning anything to a rounder boundary than this. */ + + #define BIGGEST_ALIGNMENT 64 + + /* Alignment of field after `int : 0' in a structure. */ + + #define EMPTY_FIELD_BOUNDARY 32 + + /* Alignment on even adresses for LARL instruction. */ + + #define CONSTANT_ALIGNMENT(EXP, ALIGN) (ALIGN) < 16 ? 16 : (ALIGN) + + #define DATA_ALIGNMENT(TYPE, ALIGN) (ALIGN) < 16 ? 16 : (ALIGN) + + /* Define this if move instructions will actually fail to work when given + unaligned data. */ + + #define STRICT_ALIGNMENT 0 + + /* real arithmetic */ + + #define REAL_ARITHMETIC + + /* Define target floating point format. */ + + #undef TARGET_FLOAT_FORMAT + #ifdef IEEE_FLOAT + #define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT + #else + #define TARGET_FLOAT_FORMAT IBM_FLOAT_FORMAT + #endif + + /* Define if special allocation order desired. */ + + #define REG_ALLOC_ORDER \ + { 1, 2, 3, 4, 5, 0, 14, 13, 12, 11, 10, 9, 8, 7, 6, \ + 16, 17, 18, 19, 20, 21, 22, 23, \ + 24, 25, 26, 27, 28, 29, 30, 31, \ + 15, 32, 33 } + + /* Standard register usage. */ + + #define INT_REGNO_P(N) ( (N) >= 0 && (N) < 16 ) + #ifdef IEEE_FLOAT + #define FLOAT_REGNO_P(N) ( (N) >= 16 && (N) < 32 ) + #else + #define FLOAT_REGNO_P(N) ( (N) >= 16 && (N) < 20 ) + #endif + #define CC_REGNO_P(N) ( (N) == 33 ) + + /* Number of actual hardware registers. The hardware registers are + assigned numbers for the compiler from 0 to just below + FIRST_PSEUDO_REGISTER. + All registers that the compiler knows about must be given numbers, + even those that are not normally considered general registers. + For the 390, we give the data registers numbers 0-15, + and the floating point registers numbers 16-19. + G5 and following have 16 IEEE floating point register, + which get numbers 16-31. */ + + #define FIRST_PSEUDO_REGISTER 34 + + /* The following register have a fix usage + GPR 12: GOT register points to the GOT, setup in prologue, + GOT contains pointer to variables in shared libraries + GPR 13: Base register setup in prologue to point to the + literal table of each function + GPR 14: Return registers holds the return address + GPR 15: Stack pointer */ + + #define PIC_OFFSET_TABLE_REGNUM 12 + #define BASE_REGISTER 13 + #define RETURN_REGNUM 14 + #define STACK_POINTER_REGNUM 15 + + #define FIXED_REGISTERS \ + { 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 1, 1, 1, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 1, 1 } + + /* 1 for registers not available across function calls. These must include + the FIXED_REGISTERS and also any registers that can be used without being + saved. + The latter must include the registers where values are returned + and the register where structure-value addresses are passed. */ + + #define CALL_USED_REGISTERS \ + { 1, 1, 1, 1, \ + 1, 1, 0, 0, \ + 0, 0, 0, 0, \ + 0, 1, 1, 1, \ + 1, 1, 0, 0, \ + 1, 1, 1, 1, \ + 1, 1, 1, 1, \ + 1, 1, 1, 1, \ + 1, 1 } + + /* If not pic code, gpr 12 can be used. */ + + #define CONDITIONAL_REGISTER_USAGE \ + do \ + { \ + if (flag_pic) \ + { \ + fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ + call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ + } \ + } while (0) + + /* The following register have a special usage + GPR 11: Frame pointer if needed to point to automatic variables. + GPR 32: In functions with more the 5 args this register + points to that arguments, it is always eliminated + with stack- or frame-pointer. + GPR 33: Condition code 'register' */ + + #define FRAME_POINTER_REGNUM 11 + + #define ARG_POINTER_REGNUM 32 + + #define CC_REGNUM 33 + + /* We use the register %r0 to pass the static chain to a nested function. + + Note: It is assumed that this register is call-clobbered! + We can't use any of the function-argument registers either, + and register 1 is needed by the trampoline code, so we have + no other choice but using this one ... */ + + #define STATIC_CHAIN_REGNUM 0 + + /* Return number of consecutive hard regs needed starting at reg REGNO + to hold something of mode MODE. + This is ordinarily the length in words of a value of mode MODE + but can be less for certain modes in special long registers. */ + + #define HARD_REGNO_NREGS(REGNO, MODE) \ + (FLOAT_REGNO_P(REGNO)? \ + (GET_MODE_CLASS(MODE) == MODE_COMPLEX_FLOAT ? 2 : 1) : \ + INT_REGNO_P(REGNO)? \ + ((GET_MODE_SIZE(MODE)+UNITS_PER_WORD-1) / UNITS_PER_WORD) : \ + 1) + + /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. + The gprs can hold QI, HI, SI, SF, DF, SC and DC. + Even gprs can hold DI. + The floating point registers can hold DF, SF, DC and SC. */ + + #define HARD_REGNO_MODE_OK(REGNO, MODE) \ + (FLOAT_REGNO_P(REGNO)? \ + (GET_MODE_CLASS(MODE) == MODE_FLOAT || \ + GET_MODE_CLASS(MODE) == MODE_COMPLEX_FLOAT) : \ + INT_REGNO_P(REGNO)? \ + (HARD_REGNO_NREGS(REGNO, MODE) == 1 || !((REGNO) & 1)) : \ + CC_REGNO_P(REGNO)? \ + GET_MODE_CLASS (MODE) == MODE_CC : \ + 0) + + /* Value is 1 if it is a good idea to tie two pseudo registers when one has + mode MODE1 and one has mode MODE2. + If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, + for any hard reg, then this must be 0 for correct output. */ + + #define MODES_TIEABLE_P(MODE1, MODE2) \ + (((MODE1) == SFmode || (MODE1) == DFmode) \ + == ((MODE2) == SFmode || (MODE2) == DFmode)) + + + /* Define this macro if references to a symbol must be treated + differently depending on something about the variable or + function named by the symbol (such as what section it is in). + + On s390, if using PIC, mark a SYMBOL_REF for a non-global symbol + so that we may access it directly in the GOT. */ + + #define ENCODE_SECTION_INFO(DECL) \ + do \ + { \ + if (flag_pic) \ + { \ + rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ + ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \ + \ + if (GET_CODE (rtl) == MEM) \ + { \ + SYMBOL_REF_FLAG (XEXP (rtl, 0)) \ + = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ + || ! TREE_PUBLIC (DECL)); \ + } \ + } \ + } \ + while (0) + + + /* This is an array of structures. Each structure initializes one pair + of eliminable registers. The "from" register number is given first, + followed by "to". Eliminations of the same "from" register are listed + in order of preference. */ + + #define ELIMINABLE_REGS \ + {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ + { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ + { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}} + + #define CAN_ELIMINATE(FROM, TO) (1) + + #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ + { if ((FROM) == FRAME_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM) \ + { (OFFSET) = 0; } \ + else if ((FROM) == ARG_POINTER_REGNUM && (TO) == FRAME_POINTER_REGNUM) \ + { (OFFSET) = s390_arg_frame_offset (); } \ + else if ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM) \ + { (OFFSET) = s390_arg_frame_offset (); } \ + } + + #define CAN_DEBUG_WITHOUT_FP + + /* Value should be nonzero if functions must have frame pointers. + Zero means the frame pointer need not be set up (and parms may be + accessed via the stack pointer) in functions that seem suitable. + This is computed in `reload', in reload1.c. */ + + #define FRAME_POINTER_REQUIRED 0 + + /* Define the classes of registers for register constraints in the + machine description. Also define ranges of constants. + + One of the classes must always be named ALL_REGS and include all hard regs. + If there is more than one class, another class must be named NO_REGS + and contain no registers. + + The name GENERAL_REGS must be the name of a class (or an alias for + another name such as ALL_REGS). This is the class of registers + that is allowed by "g" or "r" in a register constraint. + Also, registers outside this class are allocated only when + instructions express preferences for them. + + The classes must be numbered in nondecreasing order; that is, + a larger-numbered class must never be contained completely + in a smaller-numbered class. + + For any two classes, it is very desirable that there be another + class that represents their union. */ + + /*#define SMALL_REGISTER_CLASSES 1*/ + + enum reg_class + { + NO_REGS, ADDR_REGS, GENERAL_REGS, + FP_REGS, ALL_REGS, LIM_REG_CLASSES + }; + + #define N_REG_CLASSES (int) LIM_REG_CLASSES + + /* Give names of register classes as strings for dump file. */ + + #define REG_CLASS_NAMES \ + { "NO_REGS","ADDR_REGS", "GENERAL_REGS", "FP_REGS", "ALL_REGS" } + + /* Define which registers fit in which classes. This is an initializer for + a vector of HARD_REG_SET of length N_REG_CLASSES. + G5 and latter have 16 register and support IEEE floating point operations. */ + + #define REG_CLASS_CONTENTS \ + { \ + { 0x00000000, 0x00000000 }, /* NO_REGS */ \ + { 0x0000fffe, 0x00000001 }, /* ADDR_REGS */ \ + { 0x0000ffff, 0x00000001 }, /* GENERAL_REGS */ \ + { 0xffff0000, 0x00000000 }, /* FP_REGS */ \ + { 0xffffffff, 0x00000003 }, /* ALL_REGS */ \ + } + + + /* The same information, inverted: + Return the class number of the smallest class containing + reg number REGNO. This could be a conditional expression + or could index an array. */ + + #define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO]) + + extern enum reg_class regclass_map[]; /* smalled class containing REGNO */ + + /* The class value for index registers, and the one for base regs. */ + + #define INDEX_REG_CLASS ADDR_REGS + #define BASE_REG_CLASS ADDR_REGS + + /* Get reg_class from a letter such as appears in the machine description. */ + + #define REG_CLASS_FROM_LETTER(C) \ + ((C) == 'a' ? ADDR_REGS : \ + (C) == 'd' ? GENERAL_REGS : \ + (C) == 'f' ? FP_REGS : NO_REGS) + + /* The letters I, J, K, L and M in a register constraint string can be used + to stand for particular ranges of immediate operands. + This macro defines what the ranges are. + C is the letter, and VALUE is a constant value. + Return 1 if VALUE is in the range specified by C. */ + + #define CONST_OK_FOR_LETTER_P(VALUE, C) \ + ((C) == 'I' ? (unsigned long) (VALUE) < 256 : \ + (C) == 'J' ? (unsigned long) (VALUE) < 4096 : \ + (C) == 'K' ? (VALUE) >= -32768 && (VALUE) < 32768 : \ + (C) == 'L' ? (unsigned long) (VALUE) < 65536 : 0) + + /* Similar, but for floating constants, and defining letters G and H. + Here VALUE is the CONST_DOUBLE rtx itself. */ + + #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 1 + + /* 'Q' means a memory-reference for a S-type operand. */ + + #define EXTRA_CONSTRAINT(OP, C) \ + ((C) == 'Q' ? s_operand (OP, GET_MODE (OP)) : \ + (C) == 'S' ? larl_operand (OP, GET_MODE (OP)) : 0) + + /* Given an rtx X being reloaded into a reg required to be in class CLASS, + return the class of reg to actually use. In general this is just CLASS; + but on some machines in some cases it is preferable to use a more + restrictive class. */ + + #define PREFERRED_RELOAD_CLASS(X, CLASS) \ + (GET_CODE (X) == CONST_DOUBLE ? \ + (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? FP_REGS : ADDR_REGS) :\ + (GET_CODE (X) == CONST_INT ? \ + (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? FP_REGS : ADDR_REGS) :\ + GET_CODE (X) == PLUS || \ + GET_CODE (X) == LABEL_REF || \ + GET_CODE (X) == SYMBOL_REF || \ + GET_CODE (X) == CONST ? ADDR_REGS : (CLASS))) + + /* Return the maximum number of consecutive registers needed to represent + mode MODE in a register of class CLASS. */ + + #define CLASS_MAX_NREGS(CLASS, MODE) \ + ((CLASS) == FP_REGS ? \ + (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT ? 2 : 1) : \ + (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) + + /* If we are copying between FP registers and anything else, we need a memory + location. */ + + #define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \ + ((CLASS1) != (CLASS2) && ((CLASS1) == FP_REGS || (CLASS2) == FP_REGS)) + + /* Get_secondary_mem widens its argument to BITS_PER_WORD which loses on 64bit + because the movsi and movsf patterns don't handle r/f moves. */ + + #define SECONDARY_MEMORY_NEEDED_MODE(MODE) \ + (GET_MODE_BITSIZE (MODE) < 32 \ + ? mode_for_size (32, GET_MODE_CLASS (MODE), 0) \ + : MODE) + + + /* A C expression whose value is nonzero if pseudos that have been + assigned to registers of class CLASS would likely be spilled + because registers of CLASS are needed for spill registers. + + The default value of this macro returns 1 if CLASS has exactly one + register and zero otherwise. On most machines, this default + should be used. Only define this macro to some other expression + if pseudo allocated by `local-alloc.c' end up in memory because + their hard registers were needed for spill registers. If this + macro returns nonzero for those classes, those pseudos will only + be allocated by `global.c', which knows how to reallocate the + pseudo to another register. If there would not be another + register available for reallocation, you should not change the + definition of this macro since the only effect of such a + definition would be to slow down register allocation. */ + + /* Stack layout; function entry, exit and calling. */ + + /* The current return address is on Offset 56 of the current frame + if we are in an leaf_function. Otherwise we have to go one stack + back. + The return address of anything farther back is accessed normally + at an offset of 56 from the frame pointer. + + FIXME: builtin_return_addr does not work correctly in a leaf + function, we need to find way to find out, if we + are in a leaf function + */ + + #define _RETURN_ADDR_OFFSET (TARGET_64BIT ? 112 : 56) + + #define RETURN_ADDR_RTX(count, frame) \ + gen_rtx (MEM, Pmode, \ + memory_address (Pmode, \ + plus_constant ( \ + copy_to_reg (gen_rtx (MEM, Pmode, \ + memory_address (Pmode, frame))), \ + _RETURN_ADDR_OFFSET))); + + /* The following macros will turn on dwarf2 exception hndling + Other code location for this exception handling are + in s390.md (eh_return insn) and in linux.c in the prologue. */ + + #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, RETURN_REGNUM) + + /* We have 31 bit mode. */ + + #define MASK_RETURN_ADDR (GEN_INT (0x7fffffff)) + + /* Location, from where return address to load. */ + + #define DWARF_FRAME_RETURN_COLUMN 14 + + /* Describe how we implement __builtin_eh_return. */ + #define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 6 : INVALID_REGNUM) + #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 10) + #define EH_RETURN_HANDLER_RTX \ + gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, \ + TARGET_64BIT? -48 : -40)) + + /* Define this if pushing a word on the stack makes the stack pointer a + smaller address. */ + + #define STACK_GROWS_DOWNWARD + + /* Define this if the nominal address of the stack frame is at the + high-address end of the local variables; that is, each additional local + variable allocated goes at a more negative offset in the frame. */ + + /* #define FRAME_GROWS_DOWNWARD */ + + /* Offset from stack-pointer to first location of outgoing args. */ + + #define STACK_POINTER_OFFSET (TARGET_64BIT ? 160 : 96) + + /* Offset within stack frame to start allocating local variables at. + If FRAME_GROWS_DOWNWARD, this is the offset to the END of the + first local allocated. Otherwise, it is the offset to the BEGINNING + of the first local allocated. */ + + #define STARTING_FRAME_OFFSET \ + (STACK_POINTER_OFFSET + current_function_outgoing_args_size) + + #define INITIAL_FRAME_POINTER_OFFSET(DEPTH) (DEPTH) = 0 + + /* If we generate an insn to push BYTES bytes, this says how many the stack + pointer really advances by. On S/390, we have no push instruction. */ + + /* #define PUSH_ROUNDING(BYTES) */ + + /* Accumulate the outgoing argument count so we can request the right + DSA size and determine stack offset. */ + + #define ACCUMULATE_OUTGOING_ARGS 1 + + /* Offset from the stack pointer register to an item dynamically + allocated on the stack, e.g., by `alloca'. + + The default value for this macro is `STACK_POINTER_OFFSET' plus the + length of the outgoing arguments. The default is correct for most + machines. See `function.c' for details. */ + #define STACK_DYNAMIC_OFFSET(FUNDECL) (STARTING_FRAME_OFFSET) + + /* Offset of first parameter from the argument pointer register value. + On the S/390, we define the argument pointer to the start of the fixed + area. */ + #define FIRST_PARM_OFFSET(FNDECL) 0 + + /* Define this if stack space is still allocated for a parameter passed + in a register. The value is the number of bytes allocated to this + area. */ + /* #define REG_PARM_STACK_SPACE(FNDECL) 32 */ + + /* Define this if the above stack space is to be considered part of the + space allocated by the caller. */ + /* #define OUTGOING_REG_PARM_STACK_SPACE */ + + /* 1 if N is a possible register number for function argument passing. + On S390, general registers 2 - 6 and floating point register 0 and 2 + are used in this way. */ + + #define FUNCTION_ARG_REGNO_P(N) (((N) >=2 && (N) <7) || \ + (N) == 16 || (N) == 17) + + /* Define a data type for recording info about an argument list during + the scan of that argument list. This data type should hold all + necessary information about the function itself and about the args + processed so far, enough to enable macros such as FUNCTION_ARG to + determine where the next arg should go. */ + + typedef struct s390_arg_structure + { + int gprs; /* gpr so far */ + int fprs; /* fpr so far */ + } + CUMULATIVE_ARGS; + + + /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to + a function whose data type is FNTYPE. + For a library call, FNTYPE is 0. */ + + #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, NN) \ + ((CUM).gprs=0, (CUM).fprs=0) + + /* Update the data in CUM to advance over an argument of mode MODE and + data type TYPE. (TYPE is null for libcalls where that information + may not be available.) */ + + #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ + s390_function_arg_advance (&CUM, MODE, TYPE, NAMED) + + /* Define where to put the arguments to a function. Value is zero to push + the argument on the stack, or a hard register in which to store the + argument. */ + + #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ + s390_function_arg (&CUM, MODE, TYPE, NAMED) + + /* Define where to expect the arguments of a function. Value is zero, if + the argument is on the stack, or a hard register in which the argument + is stored. It is the same like FUNCTION_ARG, except for unnamed args + That means, that all in case of varargs used, the arguments are expected + from the stack. + S/390 has already space on the stack for args coming in registers, + they are pushed in prologue, if needed. */ + + + /* Define the `__builtin_va_list' type. */ + + #define BUILD_VA_LIST_TYPE(VALIST) \ + (VALIST) = s390_build_va_list () + + /* Implement `va_start' for varargs and stdarg. */ + + #define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \ + s390_va_start (stdarg, valist, nextarg) + + /* Implement `va_arg'. */ + + #define EXPAND_BUILTIN_VA_ARG(valist, type) \ + s390_va_arg (valist, type) + + /* For an arg passed partly in registers and partly in memory, this is the + number of registers used. For args passed entirely in registers or + entirely in memory, zero. */ + + #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0 + + + /* Define if returning from a function call automatically pops the + arguments described by the number-of-args field in the call. */ + + #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0 + + + /* Define how to find the value returned by a function. VALTYPE is the + data type of the value (as a tree). + If the precise function being called is known, FUNC is its FUNCTION_DECL; + otherwise, FUNC is 15. */ + + #define RET_REG(MODE) ((GET_MODE_CLASS (MODE) == MODE_INT \ + || TARGET_SOFT_FLOAT ) ? 2 : 16) + + + /* for structs the address is passed, and the Callee makes a + copy, only if needed */ + + #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ + s390_function_arg_pass_by_reference (MODE, TYPE) + + + /* Register 2 (and 3) for integral values + or floating point register 0 (and 2) for fp values are used. */ + + #define FUNCTION_VALUE(VALTYPE, FUNC) \ + gen_rtx_REG ((INTEGRAL_TYPE_P (VALTYPE) \ + && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \ + || POINTER_TYPE_P (VALTYPE) \ + ? word_mode : TYPE_MODE (VALTYPE), \ + TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_HARD_FLOAT ? 16 : 2) + + /* Define how to find the value returned by a library function assuming + the value has mode MODE. */ + + #define LIBCALL_VALUE(MODE) gen_rtx (REG, MODE, RET_REG (MODE)) + + /* 1 if N is a possible register number for a function value. */ + + #define FUNCTION_VALUE_REGNO_P(N) ((N) == 2 || (N) == 16) + + /* The definition of this macro implies that there are cases where + a scalar value cannot be returned in registers. */ + + #define RETURN_IN_MEMORY(type) \ + (TYPE_MODE (type) == BLKmode || \ + GET_MODE_CLASS (TYPE_MODE (type)) == MODE_COMPLEX_INT || \ + GET_MODE_CLASS (TYPE_MODE (type)) == MODE_COMPLEX_FLOAT) + + /* Mode of stack savearea. + FUNCTION is VOIDmode because calling convention maintains SP. + BLOCK needs Pmode for SP. + NONLOCAL needs twice Pmode to maintain both backchain and SP. */ + + #define STACK_SAVEAREA_MODE(LEVEL) \ + (LEVEL == SAVE_FUNCTION ? VOIDmode \ + : LEVEL == SAVE_NONLOCAL ? (TARGET_64BIT ? TImode : DImode) : Pmode) + + /* Structure value address is passed as invisible first argument (gpr 2). */ + + #define STRUCT_VALUE 0 + + /* This macro definition sets up a default value for `main' to return. */ + + #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node) + + /* Length in units of the trampoline for entering a nested function. */ + + #define TRAMPOLINE_SIZE (TARGET_64BIT ? 36 : 20) + + /* Initialize the dynamic part of trampoline. */ + + #define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT) \ + s390_initialize_trampoline ((ADDR), (FNADDR), (CXT)) + + /* Template for constant part of trampoline. */ + + #define TRAMPOLINE_TEMPLATE(FILE) \ + s390_trampoline_template (FILE) + + /* Output assembler code to FILE to increment profiler label # LABELNO + for profiling a function entry. */ + + #define FUNCTION_PROFILER(FILE, LABELNO) \ + do { \ + extern rtx s390_profile[]; \ + extern s390_pool_count; \ + rtx tmp; \ + static char label[128]; \ + fprintf (FILE, "# function profiler \n"); \ + if (TARGET_64BIT) \ + { \ + rtx tmp[1]; \ + output_asm_insn ("stg\t14,8(15)", tmp); \ + sprintf (label, "%sP%d", LPREFIX, LABELNO); \ + tmp[0] = gen_rtx_SYMBOL_REF (Pmode, label); \ + SYMBOL_REF_FLAG (tmp[0]) = 1; \ + output_asm_insn ("larl\t1,%0", tmp); \ + tmp[0] = gen_rtx_SYMBOL_REF (Pmode, "_mcount"); \ + if (flag_pic) \ + { \ + tmp[0] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, tmp[0]), 113); \ + tmp[0] = gen_rtx_CONST (Pmode, tmp[0]); \ + } \ + output_asm_insn ("brasl\t14,%0", tmp); \ + output_asm_insn ("lg\t14,8(15)", tmp); \ + } \ + else \ + { \ + output_asm_insn ("l 14,4(15)", s390_profile); \ + s390_pool_count = 0; \ + output_asm_insn ("st 14,4(15)", s390_profile); \ + output_asm_insn ("l 14,%4", s390_profile); \ + output_asm_insn ("l 1,%9", s390_profile); \ + if (flag_pic) \ + { \ + output_asm_insn ("ar 1,13", s390_profile); \ + output_asm_insn ("bas 14,0(14,13)", s390_profile); \ + } \ + else \ + { \ + output_asm_insn ("basr 14,14", s390_profile); \ + } \ + output_asm_insn ("l 14,4(15)", s390_profile); \ + } \ + } while (0) + + /* #define PROFILE_BEFORE_PROLOGUE */ + + /* There are three profiling modes for basic blocks available. + The modes are selected at compile time by using the options + -a or -ax of the gnu compiler. + The variable `profile_block_flag' will be set according to the + selected option. + + profile_block_flag == 0, no option used: + + No profiling done. + + profile_block_flag == 1, -a option used. + + Count frequency of execution of every basic block. + + profile_block_flag == 2, -ax option used. + + Generate code to allow several different profiling modes at run time. + Available modes are: + Produce a trace of all basic blocks. + Count frequency of jump instructions executed. + In every mode it is possible to start profiling upon entering + certain functions and to disable profiling of some other functions. + + The result of basic-block profiling will be written to a file `bb.out'. + If the -ax option is used parameters for the profiling will be read + from file `bb.in'. + + */ + + /* The following macro shall output assembler code to FILE + to initialize basic-block profiling. + + If profile_block_flag == 2 + + Output code to call the subroutine `__bb_init_trace_func' + and pass two parameters to it. The first parameter is + the address of a block allocated in the object module. + The second parameter is the number of the first basic block + of the function. + + The name of the block is a local symbol made with this statement: + + ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); + + Of course, since you are writing the definition of + `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you + can take a short cut in the definition of this macro and use the + name that you know will result. + + The number of the first basic block of the function is + passed to the macro in BLOCK_OR_LABEL. + + If described in a virtual assembler language the code to be + output looks like: + + parameter1 <- LPBX0 + parameter2 <- BLOCK_OR_LABEL + call __bb_init_trace_func + + else if profile_block_flag != 0 + + Output code to call the subroutine `__bb_init_func' + and pass one single parameter to it, which is the same + as the first parameter to `__bb_init_trace_func'. + + The first word of this parameter is a flag which will be nonzero if + the object module has already been initialized. So test this word + first, and do not call `__bb_init_func' if the flag is nonzero. + Note: When profile_block_flag == 2 the test need not be done + but `__bb_init_trace_func' *must* be called. + + BLOCK_OR_LABEL may be used to generate a label number as a + branch destination in case `__bb_init_func' will not be called. + + If described in a virtual assembler language the code to be + output looks like: + + cmp (LPBX0),0 + jne local_label + parameter1 <- LPBX0 + call __bb_init_func + local_label: + + */ + + #undef FUNCTION_BLOCK_PROFILER + #define FUNCTION_BLOCK_PROFILER(FILE, BLOCK_OR_LABEL) \ + do \ + { \ + if (TARGET_64BIT) \ + { \ + rtx tmp[1]; \ + fprintf (FILE, "# function block profiler %d \n", profile_block_flag); \ + output_asm_insn ("ipm 0", tmp); \ + output_asm_insn ("aghi 15,-224", tmp); \ + output_asm_insn ("stmg 14,5,160(15)", tmp); \ + output_asm_insn ("larl 2,.LPBX0", tmp); \ + switch (profile_block_flag) \ + { \ + case 2: \ + if (BLOCK_OR_LABEL < 0x10000) { \ + tmp[0] = gen_rtx_CONST_INT (Pmode, (BLOCK_OR_LABEL)); \ + output_asm_insn ("llill 3,%x0", tmp); \ + } else { \ + int bo = BLOCK_OR_LABEL; \ + tmp[0] = gen_rtx_CONST_INT (Pmode, bo&0x7fff); \ + output_asm_insn ("llill 3,%x0", tmp); \ + tmp[0] = gen_rtx_CONST_INT (Pmode, (bo&0xffff0000)>>16); \ + output_asm_insn ("iilh 3,%x0", tmp); \ + } \ + tmp[0] = gen_rtx_SYMBOL_REF (Pmode, "__bb_init_trace_func"); \ + if (flag_pic) \ + { \ + tmp[0] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, tmp[0]), 113); \ + tmp[0] = gen_rtx_CONST (Pmode, tmp[0]); \ + } \ + output_asm_insn ("brasl\t14,%0", tmp); \ + break; \ + default: \ + output_asm_insn ("cli 7(2),0", tmp); \ + output_asm_insn ("jne 2f", tmp); \ + tmp[0] = gen_rtx_SYMBOL_REF (Pmode, "__bb_init_func"); \ + if (flag_pic) \ + { \ + tmp[0] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, tmp[0]), 113); \ + tmp[0] = gen_rtx_CONST (Pmode, tmp[0]); \ + } \ + output_asm_insn ("brasl\t14,%0", tmp); \ + break; \ + } \ + output_asm_insn ("2:", tmp); \ + output_asm_insn ("lmg 14,5,160(15)", tmp); \ + output_asm_insn ("aghi 15,224", tmp); \ + output_asm_insn ("spm 0", tmp); \ + } \ + else \ + { \ + extern rtx s390_profile[]; \ + fprintf (FILE, "# function block profiler %d \n", profile_block_flag); \ + output_asm_insn ("ipm 0", s390_profile); \ + output_asm_insn ("ahi 15,-128", s390_profile); \ + output_asm_insn ("stm 14,5,96(15)", s390_profile); \ + output_asm_insn ("l 2,%6", s390_profile); \ + if (flag_pic) \ + output_asm_insn ("ar 2,13", s390_profile); \ + switch (profile_block_flag) \ + { \ + case 2: \ + output_asm_insn ("l 4,%1", s390_profile); \ + if (BLOCK_OR_LABEL < 0x8000) { \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, (BLOCK_OR_LABEL)); \ + output_asm_insn ("lhi 3,%8", s390_profile); \ + } else { \ + int bo = BLOCK_OR_LABEL; \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, (bo&0xffff8000)>>15); \ + output_asm_insn ("lhi 3,%8", s390_profile); \ + output_asm_insn ("sll 3,15", s390_profile); \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, bo&0x7fff); \ + output_asm_insn ("ahi 3,%8", s390_profile); \ + } \ + break; \ + default: \ + output_asm_insn ("l 4,%0", s390_profile); \ + output_asm_insn ("cli 3(2),0", s390_profile); \ + output_asm_insn ("jne 2f", s390_profile); \ + break; \ + } \ + if (flag_pic) \ + output_asm_insn ("bas 14,0(4,13)", s390_profile); \ + else \ + output_asm_insn ("basr 14,4", s390_profile); \ + output_asm_insn ("2:", s390_profile); \ + output_asm_insn ("lm 14,5,96(15)", s390_profile); \ + output_asm_insn ("ahi 15,128", s390_profile); \ + output_asm_insn ("spm 0", s390_profile); \ + } \ + } while (0) + + /* The following macro shall output assembler code to FILE + to increment a counter associated with basic block number BLOCKNO. + + If profile_block_flag == 2 + + Output code to initialize the global structure `__bb' and + call the function `__bb_trace_func' which will increment the + counter. + + `__bb' consists of two words. In the first word the number + of the basic block has to be stored. In the second word + the address of a block allocated in the object module + has to be stored. + + The basic block number is given by BLOCKNO. + + The address of the block is given by the label created with + + ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); + + by FUNCTION_BLOCK_PROFILER. + + Of course, since you are writing the definition of + `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you + can take a short cut in the definition of this macro and use the + name that you know will result. + + If described in a virtual assembler language the code to be + output looks like: + + move BLOCKNO -> (__bb) + move LPBX0 -> (__bb+4) + call __bb_trace_func + + Note that function `__bb_trace_func' must not change the + machine state, especially the flag register. To grant + this, you must output code to save and restore registers + either in this macro or in the macros MACHINE_STATE_SAVE + and MACHINE_STATE_RESTORE. The last two macros will be + used in the function `__bb_trace_func', so you must make + sure that the function prologue does not change any + register prior to saving it with MACHINE_STATE_SAVE. + + else if profile_block_flag != 0 + + Output code to increment the counter directly. + Basic blocks are numbered separately from zero within each + compiled object module. The count associated with block number + BLOCKNO is at index BLOCKNO in an array of words; the name of + this array is a local symbol made with this statement: + + ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2); + + Of course, since you are writing the definition of + `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you + can take a short cut in the definition of this macro and use the + name that you know will result. + + If described in a virtual assembler language the code to be + output looks like: + + inc (LPBX2+4*BLOCKNO) + + */ + + #define BLOCK_PROFILER(FILE, BLOCKNO) \ + do \ + { \ + if (TARGET_64BIT) \ + { \ + rtx tmp[1]; \ + fprintf (FILE, "# block profiler %d block %d \n", \ + profile_block_flag, BLOCKNO); \ + output_asm_insn ("ipm 14", tmp); \ + output_asm_insn ("aghi 15,-224", tmp); \ + output_asm_insn ("stmg 14,5,160(15)", tmp); \ + output_asm_insn ("larl 2,_bb", tmp); \ + if ((BLOCKNO*8) < 0x10000) { \ + tmp[0] = gen_rtx_CONST_INT (Pmode, (BLOCKNO*8)); \ + output_asm_insn ("llill 3,%x0", tmp); \ + } else { \ + int bo = BLOCKNO*8; \ + tmp[0] = gen_rtx_CONST_INT (Pmode, bo&0xffff); \ + output_asm_insn ("llill 3,%x0", tmp); \ + tmp[0] = gen_rtx_CONST_INT (Pmode, (bo&0xffff0000)>>16); \ + output_asm_insn ("iilh 3,%x0", tmp); \ + } \ + switch (profile_block_flag) \ + { \ + case 2: \ + output_asm_insn ("stg 3,0(2)", tmp); \ + output_asm_insn ("larl 3,.LPBX0", tmp); \ + output_asm_insn ("stg 3,0(2)", tmp); \ + tmp[0] = gen_rtx_SYMBOL_REF (Pmode, "__bb_trace_func"); \ + if (flag_pic) \ + { \ + tmp[0] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, tmp[0]), 113); \ + tmp[0] = gen_rtx_CONST (Pmode, tmp[0]); \ + } \ + output_asm_insn ("brasl\t14,%0", tmp); \ + break; \ + default: \ + output_asm_insn ("larl 2,.LPBX2", tmp); \ + output_asm_insn ("la 2,0(2,3)", tmp); \ + output_asm_insn ("lg 3,0(2)", tmp); \ + output_asm_insn ("aghi 3,1", tmp); \ + output_asm_insn ("stg 3,0(2)", tmp); \ + break; \ + } \ + output_asm_insn ("lmg 14,5,160(15)", tmp); \ + output_asm_insn ("ahi 15,224", tmp); \ + output_asm_insn ("spm 14", tmp); \ + } \ + else \ + { \ + extern rtx s390_profile[]; \ + fprintf (FILE, "# block profiler %d block %d \n", \ + profile_block_flag,BLOCKNO); \ + output_asm_insn ("ipm 14", s390_profile); \ + output_asm_insn ("ahi 15,-128", s390_profile); \ + output_asm_insn ("stm 14,5,96(15)", s390_profile); \ + switch (profile_block_flag) \ + { \ + case 2: \ + output_asm_insn ("l 4,%2", s390_profile); \ + output_asm_insn ("l 2,%5", s390_profile); \ + if (flag_pic) \ + output_asm_insn ("ar 2,13", s390_profile); \ + if (BLOCKNO < 0x8000) { \ + s390_profile[7] = gen_rtx_CONST_INT (Pmode, (BLOCKNO)*4); \ + output_asm_insn ("lhi 3,%8", s390_profile); \ + } else { \ + int bo = BLOCKNO; \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, (bo&0xffff8000)>>15); \ + output_asm_insn ("lhi 3,%8", s390_profile); \ + output_asm_insn ("sll 3,15", s390_profile); \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, bo&0x7fff); \ + output_asm_insn ("ahi 3,%7", s390_profile); \ + } \ + output_asm_insn ("st 3,0(2)", s390_profile); \ + output_asm_insn ("mvc 0(4,2),%5", s390_profile); \ + if (flag_pic) \ + output_asm_insn ("bas 14,0(4,13)", s390_profile); \ + else \ + output_asm_insn ("basr 14,4", s390_profile); \ + break; \ + default: \ + if (BLOCKNO < 0x2000) { \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, (BLOCKNO)*4); \ + output_asm_insn ("lhi 2,%8", s390_profile); \ + } else { \ + int bo = BLOCKNO*4; \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, (bo&0xffff8000)>>15); \ + output_asm_insn ("lhi 2,%8", s390_profile); \ + output_asm_insn ("sll 2,15", s390_profile); \ + s390_profile[8] = gen_rtx_CONST_INT (Pmode, bo&0x7fff); \ + output_asm_insn ("ahi 2,%8", s390_profile); \ + } \ + output_asm_insn ("a 2,%7", s390_profile); \ + if (flag_pic) \ + output_asm_insn ("l 3,0(2,13)", s390_profile); \ + else \ + output_asm_insn ("l 3,0(2)", s390_profile); \ + output_asm_insn ("ahi 3,1", s390_profile); \ + if (flag_pic) \ + output_asm_insn ("st 3,0(2,13)", s390_profile); \ + else \ + output_asm_insn ("st 3,0(2)", s390_profile); \ + break; \ + } \ + output_asm_insn ("lm 14,5,96(15)", s390_profile); \ + output_asm_insn ("ahi 15,128", s390_profile); \ + output_asm_insn ("spm 14", s390_profile); \ + } \ + } while (0) + + + /* The following macro shall output assembler code to FILE + to indicate a return from function during basic-block profiling. + + If profiling_block_flag == 2: + + Output assembler code to call function `__bb_trace_ret'. + + Note that function `__bb_trace_ret' must not change the + machine state, especially the flag register. To grant + this, you must output code to save and restore registers + either in this macro or in the macros MACHINE_STATE_SAVE_RET + and MACHINE_STATE_RESTORE_RET. The last two macros will be + used in the function `__bb_trace_ret', so you must make + sure that the function prologue does not change any + register prior to saving it with MACHINE_STATE_SAVE_RET. + + else if profiling_block_flag != 0: + + The macro will not be used, so it need not distinguish + these cases. + */ + + #define FUNCTION_BLOCK_PROFILER_EXIT(FILE) \ + do { \ + if (TARGET_64BIT) \ + { \ + rtx tmp[1]; \ + fprintf (FILE, "# block profiler exit \n"); \ + output_asm_insn ("ipm 14", tmp); \ + output_asm_insn ("aghi 15,-224", tmp); \ + output_asm_insn ("stmg 14,5,160(15)", tmp); \ + tmp[0] = gen_rtx_SYMBOL_REF (Pmode, "__bb_trace_ret"); \ + if (flag_pic) \ + { \ + tmp[0] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, tmp[0]), 113); \ + tmp[0] = gen_rtx_CONST (Pmode, tmp[0]); \ + } \ + output_asm_insn ("brasl 14,%0", tmp); \ + output_asm_insn ("lmg 14,5,160(15)", tmp); \ + output_asm_insn ("aghi 15,224", tmp); \ + output_asm_insn ("spm 14", tmp); \ + } \ + else \ + { \ + extern rtx s390_profile[]; \ + fprintf (FILE, "# block profiler exit \n"); \ + output_asm_insn ("ipm 14", s390_profile); \ + output_asm_insn ("ahi 15,-128", s390_profile); \ + output_asm_insn ("stm 14,5,96(15)", s390_profile); \ + output_asm_insn ("l 4,%3", s390_profile); \ + if (flag_pic) \ + output_asm_insn ("bas 14,0(4,13)", s390_profile); \ + else \ + output_asm_insn ("basr 14,4", s390_profile); \ + output_asm_insn ("lm 14,5,96(15)", s390_profile); \ + output_asm_insn ("ahi 15,128", s390_profile); \ + output_asm_insn ("spm 14", s390_profile); \ + } \ + } while (0) + + /* The function `__bb_trace_func' is called in every basic block + and is not allowed to change the machine state. Saving (restoring) + the state can either be done in the BLOCK_PROFILER macro, + before calling function (rsp. after returning from function) + `__bb_trace_func', or it can be done inside the function by + defining the macros: + + MACHINE_STATE_SAVE(ID) + MACHINE_STATE_RESTORE(ID) + + In the latter case care must be taken, that the prologue code + of function `__bb_trace_func' does not already change the + state prior to saving it with MACHINE_STATE_SAVE. + + The parameter `ID' is a string identifying a unique macro use. + + On the s390 all save/restore is done in macros above + */ + + /* + #define MACHINE_STATE_SAVE(ID) \ + fprintf (FILE, "\tahi 15,-128 # save state\n"); \ + fprintf (FILE, "\tstm 14,5,96(15)\n"); \ + + #define MACHINE_STATE_RESTORE(ID) \ + fprintf (FILE, "\tlm 14,5,96(15) # restore state\n"); \ + fprintf (FILE, "\tahi 15,128\n"); \ + */ + + + /* Define EXIT_IGNORE_STACK if, when returning from a function, the stack + pointer does not matter (provided there is a frame pointer). */ + + #define EXIT_IGNORE_STACK 1 + + /* Addressing modes, and classification of registers for them. */ + + /* #define HAVE_POST_INCREMENT */ + /* #define HAVE_POST_DECREMENT */ + + /* #define HAVE_PRE_DECREMENT */ + /* #define HAVE_PRE_INCREMENT */ + + /* These assume that REGNO is a hard or pseudo reg number. They give + nonzero only if REGNO is a hard reg of the suitable class or a pseudo + reg currently allocated to a suitable hard reg. + These definitions are NOT overridden anywhere. */ + + #define REGNO_OK_FOR_INDEX_P(REGNO) \ + (((REGNO) > 0 && (REGNO) < 16) || (REGNO) == ARG_POINTER_REGNUM \ + /* || (REGNO) == FRAME_POINTER_REGNUM */ \ + || (reg_renumber[REGNO] > 0 && reg_renumber[REGNO] < 16)) + + #define REGNO_OK_FOR_BASE_P(REGNO) REGNO_OK_FOR_INDEX_P (REGNO) + + #define REGNO_OK_FOR_DATA_P(REGNO) \ + ((REGNO) < 16 || (unsigned) reg_renumber[REGNO] < 16) + + #define REGNO_OK_FOR_FP_P(REGNO) \ + FLOAT_REGNO_P (REGNO) + + /* Now macros that check whether X is a register and also, + strictly, whether it is in a specified class. */ + + /* 1 if X is a data register. */ + + #define DATA_REG_P(X) (REG_P (X) && REGNO_OK_FOR_DATA_P (REGNO (X))) + + /* 1 if X is an fp register. */ + + #define FP_REG_P(X) (REG_P (X) && REGNO_OK_FOR_FP_P (REGNO (X))) + + /* 1 if X is an address register. */ + + #define ADDRESS_REG_P(X) (REG_P (X) && REGNO_OK_FOR_BASE_P (REGNO (X))) + + /* Maximum number of registers that can appear in a valid memory address. */ + + #define MAX_REGS_PER_ADDRESS 2 + + /* Recognize any constant value that is a valid address. */ + + #define CONSTANT_ADDRESS_P(X) 0 + + #define SYMBOLIC_CONST(X) \ + (GET_CODE (X) == SYMBOL_REF \ + || GET_CODE (X) == LABEL_REF \ + || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X))) + + /* General operand is everything except SYMBOL_REF, CONST and CONST_DOUBLE + they have to be forced to constant pool + CONST_INT have to be forced into constant pool, if greater than + 64k. Depending on the insn they have to be force into constant pool + for smaller value; in this case we have to work with nonimmediate operand. */ + + #define LEGITIMATE_PIC_OPERAND_P(X) \ + legitimate_pic_operand_p (X) + + /* Nonzero if the constant value X is a legitimate general operand. + It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ + + #define LEGITIMATE_CONSTANT_P(X) \ + legitimate_constant_p (X) + + /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check + its validity for a certain class. We have two alternate definitions + for each of them. The usual definition accepts all pseudo regs; the + other rejects them all. The symbol REG_OK_STRICT causes the latter + definition to be used. + + Most source files want to accept pseudo regs in the hope that they will + get allocated to the class that the insn wants them to be in. + Some source files that are used after register allocation + need to be strict. */ + + /* + * Nonzero if X is a hard reg that can be used as an index or if it is + * a pseudo reg. + */ + + #define REG_OK_FOR_INDEX_NONSTRICT_P(X) \ + ((GET_MODE (X) == Pmode) && \ + ((REGNO (X) > 0 && REGNO (X) < 16) || \ + (REGNO (X) == ARG_POINTER_REGNUM) || \ + (REGNO (X) >= FIRST_PSEUDO_REGISTER))) + + /* Nonzero if X is a hard reg that can be used as a base reg or if it is + a pseudo reg. */ + + #define REG_OK_FOR_BASE_NONSTRICT_P(X) REG_OK_FOR_INDEX_NONSTRICT_P (X) + + /* Nonzero if X is a hard reg that can be used as an index. */ + + #define REG_OK_FOR_INDEX_STRICT_P(X) \ + ((GET_MODE (X) == Pmode) && (REGNO_OK_FOR_INDEX_P (REGNO (X)))) + + /* Nonzero if X is a hard reg that can be used as a base reg. */ + + #define REG_OK_FOR_BASE_STRICT_P(X) \ + ((GET_MODE (X) == Pmode) && (REGNO_OK_FOR_BASE_P (REGNO (X)))) + + + #ifndef REG_OK_STRICT + #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_NONSTRICT_P(X) + #define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NONSTRICT_P(X) + #else + #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P(X) + #define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P(X) + #endif + + + /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression that is a + valid memory address for an instruction. + The MODE argument is the machine mode for the MEM expression + that wants to use this address. + + The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS, + except for CONSTANT_ADDRESS_P which is actually machine-independent. */ + + #ifdef REG_OK_STRICT + #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ + { \ + if (legitimate_address_p (MODE, X, 1)) \ + goto ADDR; \ + } + #else + #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ + { \ + if (legitimate_address_p (MODE, X, 0)) \ + goto ADDR; \ + } + #endif + + + /* S/390 has no mode dependent addresses. */ + + #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) + + /* Try machine-dependent ways of modifying an illegitimate address + to be legitimate. If we find one, return the new, valid address. + This macro is used in only one place: `memory_address' in explow.c. */ + + #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \ + { \ + (X) = legitimize_address (X, OLDX, MODE); \ + if (memory_address_p (MODE, X)) \ + goto WIN; \ + } + + /* Specify the machine mode that this machine uses for the index in the + tablejump instruction. */ + + #define CASE_VECTOR_MODE (TARGET_64BIT ? DImode : SImode) + + /* Define this if the tablejump instruction expects the table to contain + offsets from the address of the table. + Do not define this if the table should contain absolute addresses. */ + + /* #define CASE_VECTOR_PC_RELATIVE */ + + /* Load from integral MODE < SI from memory into register makes sign_extend + or zero_extend + In our case sign_extension happens for Halfwords, other no extension. */ + + #define LOAD_EXTEND_OP(MODE) \ + (TARGET_64BIT ? ((MODE) == QImode ? ZERO_EXTEND : \ + (MODE) == HImode ? SIGN_EXTEND : NIL) \ + : ((MODE) == HImode ? SIGN_EXTEND : NIL)) + + /* Specify the tree operation to be used to convert reals to integers. */ + + #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR + + /* Define this if fixuns_trunc is the same as fix_trunc. */ + + /* #define FIXUNS_TRUNC_LIKE_FIX_TRUNC */ + + /* We use "unsigned char" as default. */ + + #define DEFAULT_SIGNED_CHAR 0 + + /* This is the kind of divide that is easiest to do in the general case. */ + + #define EASY_DIV_EXPR TRUNC_DIV_EXPR + + /* Max number of bytes we can move from memory to memory in one reasonably + fast instruction. */ + + #define MOVE_MAX 256 + + /* Define this if zero-extension is slow (more than one real instruction). */ + + #define SLOW_ZERO_EXTEND + + /* Nonzero if access to memory by bytes is slow and undesirable. */ + + #define SLOW_BYTE_ACCESS 1 + + /* Define if shifts truncate the shift count which implies one can omit + a sign-extension or zero-extension of a shift count. */ + + /* #define SHIFT_COUNT_TRUNCATED */ + + /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits + is done just by pretending it is already truncated. */ + + #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 + + /* We assume that the store-condition-codes instructions store 0 for false + and some other value for true. This is the value stored for true. */ + + /* #define STORE_FLAG_VALUE -1 */ + + /* When a prototype says `char' or `short', really pass an `int'. */ + + #define PROMOTE_PROTOTYPES 1 + + /* Don't perform CSE on function addresses. */ + + #define NO_FUNCTION_CSE + + /* 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) + + /* A function address in a call instruction is a byte address (for + indexing purposes) so give the MEM rtx a byte's mode. */ + + #define FUNCTION_MODE QImode + + + /* A part of a C `switch' statement that describes the relative costs + of constant RTL expressions. It must contain `case' labels for + expression codes `const_int', `const', `symbol_ref', `label_ref' + and `const_double'. Each case must ultimately reach a `return' + statement to return the relative cost of the use of that kind of + constant value in an expression. The cost may depend on the + precise value of the constant, which is available for examination + in X, and the rtx code of the expression in which it is contained, + found in OUTER_CODE. + + CODE is the expression code--redundant, since it can be obtained + with `GET_CODE (X)'. */ + /* Force_const_mem does not work out of reload, because the saveable_obstack + is set to reload_obstack, which does not live long enough. + Because of this we cannot use force_const_mem in addsi3. + This leads to problems with gen_add2_insn with a constant greater + than a short. Because of that we give a addition of greater + constants a cost of 3 (reload1.c 10096). */ + + + #define CONST_COSTS(RTX, CODE, OUTER_CODE) \ + case CONST: \ + if ((GET_CODE (XEXP (RTX, 0)) == MINUS) && \ + (GET_CODE (XEXP (XEXP (RTX, 0), 1)) != CONST_INT)) \ + return 1000; \ + case CONST_INT: \ + if ((OUTER_CODE == PLUS) && \ + ((INTVAL (RTX) > 32767) || \ + (INTVAL (RTX) < -32768))) \ + return COSTS_N_INSNS (3); \ + case LABEL_REF: \ + case SYMBOL_REF: \ + case CONST_DOUBLE: \ + return 0; \ + + + /* Like `CONST_COSTS' but applies to nonconstant RTL expressions. + This can be used, for example, to indicate how costly a multiply + instruction is. In writing this macro, you can use the construct + `COSTS_N_INSNS (N)' to specify a cost equal to N fast + instructions. OUTER_CODE is the code of the expression in which X + is contained. + + This macro is optional; do not define it if the default cost + assumptions are adequate for the target machine. */ + + #define RTX_COSTS(X, CODE, OUTER_CODE) \ + case ASHIFT: \ + case ASHIFTRT: \ + case LSHIFTRT: \ + case PLUS: \ + case AND: \ + case IOR: \ + case XOR: \ + case MINUS: \ + case NEG: \ + case NOT: \ + return 1; \ + case MULT: \ + if (GET_MODE (XEXP (X, 0)) == DImode) \ + return 40; \ + else \ + return 7; \ + case DIV: \ + case UDIV: \ + case MOD: \ + case UMOD: \ + return 33; + + + /* An expression giving the cost of an addressing mode that contains + ADDRESS. If not defined, the cost is computed from the ADDRESS + expression and the `CONST_COSTS' values. + + For most CISC machines, the default cost is a good approximation + of the true cost of the addressing mode. However, on RISC + machines, all instructions normally have the same length and + execution time. Hence all addresses will have equal costs. + + In cases where more than one form of an address is known, the form + with the lowest cost will be used. If multiple forms have the + same, lowest, cost, the one that is the most complex will be used. + + For example, suppose an address that is equal to the sum of a + register and a constant is used twice in the same basic block. + When this macro is not defined, the address will be computed in a + register and memory references will be indirect through that + register. On machines where the cost of the addressing mode + containing the sum is no higher than that of a simple indirect + reference, this will produce an additional instruction and + possibly require an additional register. Proper specification of + this macro eliminates this overhead for such machines. + + Similar use of this macro is made in strength reduction of loops. + + ADDRESS need not be valid as an address. In such a case, the cost + is not relevant and can be any value; invalid addresses need not be + assigned a different cost. + + On machines where an address involving more than one register is as + cheap as an address computation involving only one register, + defining `ADDRESS_COST' to reflect this can cause two registers to + be live over a region of code where only one would have been if + `ADDRESS_COST' were not defined in that manner. This effect should + be considered in the definition of this macro. Equivalent costs + should probably only be given to addresses with different numbers + of registers on machines with lots of registers. + + This macro will normally either not be defined or be defined as a + constant. + + On s390 symbols are expensive if compiled with fpic + lifetimes. */ + + #define ADDRESS_COST(RTX) \ + ((flag_pic && GET_CODE (RTX) == SYMBOL_REF) ? 2 : 1) + + /* On s390, copy between fprs and gprs is expensive. */ + + #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ + (((CLASS1 != CLASS2) && \ + (CLASS1 == FP_REGS || CLASS2 == FP_REGS)) ? 10 : 1) + + + /* A C expression for the cost of moving data of mode M between a + register and memory. A value of 2 is the default; this cost is + relative to those in `REGISTER_MOVE_COST'. + + If moving between registers and memory is more expensive than + between two registers, you should define this macro to express the + relative cost. */ + + #define MEMORY_MOVE_COST(M, C, I) 1 + + /* A C expression for the cost of a branch instruction. A value of 1 + is the default; other values are interpreted relative to that. */ + + #define BRANCH_COST 1 + + /* Add any extra modes needed to represent the condition code. */ + #define EXTRA_CC_MODES \ + CC (CCZmode, "CCZ") \ + CC (CCAmode, "CCA") \ + CC (CCUmode, "CCU") \ + CC (CCSmode, "CCS") \ + CC (CCTmode, "CCT") + + /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE, + return the mode to be used for the comparison. */ + + #define SELECT_CC_MODE(OP, X, Y) \ + ( (OP) == EQ || (OP) == NE ? CCZmode \ + : (OP) == LE || (OP) == LT || \ + (OP) == GE || (OP) == GT ? CCSmode \ + : (OP) == LEU || (OP) == LTU || \ + (OP) == GEU || (OP) == GTU ? CCUmode \ + : CCmode ) + + + /* Define the information needed to generate branch and scc insns. This is + stored from the compare operation. Note that we can't use "rtx" here + since it hasn't been defined! */ + + extern struct rtx_def *s390_compare_op0, *s390_compare_op1; + + extern int s390_match_ccmode PARAMS ((struct rtx_def *, int)); + + + /* How to refer to registers in assembler output. This sequence is + indexed by compiler's hard-register-number (see above). */ + + #define REGISTER_NAMES \ + { "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", \ + "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", \ + "%f0", "%f2", "%f4", "%f6", "%f1", "%f3", "%f5", "%f7", \ + "%f8", "%f10", "%f12", "%f14", "%f9", "%f11", "%f13", "%f15", \ + "%ap", "%cc" \ + } + + /* implicit call of memcpy, not bcopy */ + + #define TARGET_MEM_FUNCTIONS + + + /* Define results of standard character escape sequences. */ + + #define TARGET_BELL (0x07) + #define TARGET_BS (0x08) + #define TARGET_TAB (0x09) + #define TARGET_NEWLINE (0x0A) + #define TARGET_VT 11 + #define TARGET_FF 12 + #define TARGET_CR 13 + + /* Print operand X (an rtx) in assembler syntax to file FILE. + CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. + For `%' followed by punctuation, CODE is the punctuation and X is null. */ + + #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE) + + #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR) + + + /* Define the codes that are matched by predicates in aux-output.c. */ + + #define PREDICATE_CODES \ + {"s_operand", { MEM }}, \ + {"bras_sym_operand",{ SYMBOL_REF, CONST }}, \ + {"r_or_s_operand", { MEM, SUBREG, REG }}, \ + {"r_or_im8_operand", { CONST_INT, SUBREG, REG }}, \ + {"r_or_s_or_im8_operand", { MEM, SUBREG, REG, CONST_INT }}, \ + {"r_or_x_or_im16_operand", { MEM, SUBREG, REG, CONST_INT }}, \ + {"const0_operand", { CONST_INT, CONST_DOUBLE }}, \ + {"const1_operand", { CONST_INT, CONST_DOUBLE }}, \ + {"tmxx_operand", { CONST_INT, MEM }}, + + + /* A C statement (sans semicolon) to update the integer variable COST + based on the relationship between INSN that is dependent on + DEP_INSN through the dependence LINK. The default is to make no + adjustment to COST. This can be used for example to specify to + the scheduler that an output- or anti-dependence does not incur + the same cost as a data-dependence. */ + + #define ADJUST_COST(insn, link, dep_insn, cost) \ + (cost) = s390_adjust_cost (insn, link, dep_insn, cost) + + + /* Constant Pool for all symbols operands which are changed with + force_const_mem during insn generation (expand_insn). */ + + extern struct rtx_def *s390_pool_start_insn; + extern int s390_pool_count; + extern int s390_nr_constants; + + /* Function is splitted in chunk, if literal pool could overflow + Value need to be lowered, if problems with displacement overflow. */ + + #define S390_REL_MAX 55000 + #define S390_CHUNK_MAX 0x2000 + #define S390_CHUNK_OV 0x8000 + #define S390_POOL_MAX 0xe00 + + #define ASM_OUTPUT_POOL_PROLOGUE(FILE, FUNNAME, fndecl, size) \ + { \ + register rtx insn; \ + struct pool_constant *pool; \ + \ + if (s390_pool_count == -1) \ + { \ + s390_nr_constants = 0; \ + for (pool = first_pool; pool; pool = pool->next) \ + if (pool->mark) s390_nr_constants++; \ + return; \ + } \ + if (first_pool == 0) { \ + s390_asm_output_pool_prologue (FILE, FUNNAME, fndecl, size); \ + return; \ + } \ + for (pool = first_pool; pool; pool = pool->next) \ + pool->mark = 0; \ + \ + insn = s390_pool_start_insn; \ + \ + if (insn==NULL_RTX) \ + insn = get_insns (); \ + else \ + insn = NEXT_INSN (insn); \ + for (; insn; insn = NEXT_INSN (insn)) { \ + if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') { \ + if (s390_stop_dump_lit_p (insn)) { \ + mark_constants (PATTERN (insn)); \ + break; \ + } else \ + mark_constants (PATTERN (insn)); \ + } \ + } \ + \ + /* Mark entries referenced by other entries */ \ + for (pool = first_pool; pool; pool = pool->next) \ + if (pool->mark) \ + mark_constants (pool->constant); \ + \ + s390_asm_output_pool_prologue (FILE, FUNNAME, fndecl, size); \ + } + + /* We need to return, because otherwise the pool is deleted of the + constant pool after the first output. */ + + #define ASM_OUTPUT_POOL_EPILOGUE(FILE, FUNNAME, fndecl, size) return; + + #define ASM_OUTPUT_SPECIAL_POOL_ENTRY(FILE, EXP, MODE, ALIGN, LABELNO, WIN) \ + { \ + if ((s390_pool_count == 0) || (s390_pool_count > 0 && LABELNO >= 0)) \ + { \ + fprintf (FILE, ".LC%d:\n", LABELNO); \ + LABELNO = ~LABELNO; \ + } \ + if (s390_pool_count > 0) \ + { \ + fprintf (FILE, ".LC%d_%X:\n", ~LABELNO, s390_pool_count); \ + } \ + \ + /* Output the value of the constant itself. */ \ + switch (GET_MODE_CLASS (pool->mode)) \ + { \ + case MODE_FLOAT: \ + if (GET_CODE (x) != CONST_DOUBLE) \ + abort (); \ + \ + memcpy ((char *) &u, (char *) &CONST_DOUBLE_LOW (x), sizeof u); \ + assemble_real (u.d, pool->mode); \ + break; \ + \ + case MODE_INT: \ + case MODE_PARTIAL_INT: \ + if (flag_pic && (GET_CODE (x) == CONST || \ + GET_CODE (x) == SYMBOL_REF || \ + GET_CODE (x) == LABEL_REF )) \ + { \ + fprintf (FILE, "%s\t",TARGET_64BIT ? ASM_QUAD : ASM_LONG); \ + s390_output_symbolic_const (FILE, x); \ + fputc ('\n', (FILE)); \ + } \ + else \ + assemble_integer (x, GET_MODE_SIZE (pool->mode), 1); \ + break; \ + \ + default: \ + abort (); \ + } \ + goto WIN; \ + } + + #endif diff -Nrc3pad gcc-3.0/gcc/config/s390/s390.md gcc-3.0.1/gcc/config/s390/s390.md *** gcc-3.0/gcc/config/s390/s390.md Wed Dec 31 16:00:00 1969 --- gcc-3.0.1/gcc/config/s390/s390.md Fri Aug 10 15:19:19 2001 *************** *** 0 **** --- 1,5882 ---- + ;;- Machine description for GNU compiler -- S/390 / zSeries version. + ;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + ;; Contributed by Hartmut Penner (hpenner@de.ibm.com) and + ;; Ulrich Weigand (uweigand@de.ibm.com). + ;; This file is part of GNU CC. + + ;; GNU CC 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 2, or (at your option) + ;; any later version. + + ;; GNU CC 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 GNU CC; see the file COPYING. If not, write to + ;; the Free Software Foundation, 59 Temple Place - Suite 330, + ;; Boston, MA 02111-1307, USA. + + ;; + ;; Special constraints for s/390 machine description: + ;; + ;; a -- Any address register from 1 to 15. + ;; d -- Any register from 0 to 15. + ;; I -- An 8-bit constant (0..255). + ;; J -- A 12-bit constant (0..4095). + ;; K -- A 16-bit constant (-32768..32767). + ;; Q -- A memory reference without index-register. + ;; S -- Valid operand for the LARL instruction. + ;; + ;; Special formats used for outputting 390 instructions. + ;; + ;; %b -- Print a constant byte integer. xy + ;; %h -- Print a signed 16-bit. wxyz + ;; %N -- Print next register (second word of a DImode reg) or next word. + ;; %M -- Print next register (second word of a TImode reg) or next word. + ;; %O -- Print the offset of a memory reference (PLUS (REG) (CONST_INT)). + ;; %R -- Print the register of a memory reference (PLUS (REG) (CONST_INT)). + ;; + ;; We have a special constraint for pattern matching. + ;; + ;; s_operand -- Matches a valid S operand in a RS, SI or SS type instruction. + ;; + ;; r_or_s_operand -- Matches a register or a valid S operand in a RS, SI + ;; or SS type instruction or a register + ;; + + ;; Insn type. Used to default other attribute values. + + ; + ; Insn are devide in two classes: + ; mem: Use of base and/or index register for address generation + ; reg: Use of second and third register not for address generation + ; + + (define_attr "atype" "mem,reg" (const_string "reg")) + + ; + ; Insn may take 1,2,3 or many cycles + ; For the scheduling it does not matter, if a instruction has + ; a issue_delay from 4 or more cycles, since the address dependency + ; between two insns needs at least 4 cycles. + ; + + (define_attr "cycle" "1,2,3,n" (const_string "1")) + + ; + ; There are three classes of insns: + ; set: instruction setting a (potential) address relevant register + ; xset: instruction setting no address relevant register + ; la: instruction setting a (potential) address relevant register, + ; but behave 'better' on the pipeline + ; + + (define_attr "type" "set,xset,la" (const_string "xset")) + + ; + ; Set operations changing a target register, which could be used for + ; address generation. Adjust cost will check, if realy applicable. + ; + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "set") + (eq_attr "cycle" "1")) + 5 1 [(eq_attr "atype" "mem")] ) + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "set") + (eq_attr "cycle" "2")) 5 2) + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "set") + (eq_attr "cycle" "3")) 5 3) + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "set") + (eq_attr "cycle" "n")) 5 4) + + (define_function_unit "memory" 1 0 + (eq_attr "type" "la") 2 1) + + ; + ; xset insns, which don't set any valid address register. + ; Only the issue delay matters. + ; + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "xset") + (eq_attr "cycle" "1")) 1 1) + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "xset") + (eq_attr "cycle" "2")) 1 2) + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "xset") + (eq_attr "cycle" "3")) 1 3) + + (define_function_unit "memory" 1 0 + (and (eq_attr "type" "xset") + (eq_attr "cycle" "n")) 1 4) + + ; Operand type. Used to default length attribute values + + (define_attr "op_type" + "NN,E,RR,RRE,RX,RS,RSI,RI,SI,S,SS,SSE,RXE,RSE,RIL,RIE" + (const_string "RX")) + + ;; Length in bytes. + + (define_attr "length" "" + (cond [ (eq_attr "op_type" "E") (const_int 2) + (eq_attr "op_type" "RR") (const_int 2) + (eq_attr "op_type" "RX") (const_int 4) + (eq_attr "op_type" "RI") (const_int 4) + (eq_attr "op_type" "RRE") (const_int 4) + (eq_attr "op_type" "RS") (const_int 4) + (eq_attr "op_type" "RSI") (const_int 4) + (eq_attr "op_type" "RX") (const_int 4) + (eq_attr "op_type" "S") (const_int 4) + (eq_attr "op_type" "SI") (const_int 4) + (eq_attr "op_type" "SS") (const_int 6) + (eq_attr "op_type" "SSE") (const_int 6) + (eq_attr "op_type" "RXE") (const_int 6) + (eq_attr "op_type" "RSE") (const_int 6) + (eq_attr "op_type" "RIL") (const_int 6)] + (const_int 4))) + + ;; Define attributes for `asm' insns. + + (define_asm_attributes [(set_attr "type" "xset") + (set_attr "op_type" "NN")]) + + ;; + ;; Condition Codes + ;; + ; + ; CCL: Zero Nonzero Zero Nonzero (AL, ALR, SL, SLR, N, NC, NI, NR, O, OC, OI, OR, X, XC, XI, XR) + ; CCA: Zero Zero Overflow (A, AR, AH, AHI, S, SR, SH, SHI, LTR, LCR, LNR, LPR, SLA, SLDA, SLA, SRDA) + ; CCU: Equal ULess UGreater -- (CL, CLR, CLI, CLM) + ; CCS: Equal SLess SGreater -- (C, CR, CH, CHI, ICM) + ; CCT: Zero Mixed Mixed Ones (TM, TMH, TML) + + ; CCZ -> CCL / CCZ1 + ; CCZ1 -> CCA/CCU/CCS/CCT + ; CCS -> CCA + + ; String: CLC, CLCL, CLCLE, CLST, CUSE, MVCL, MVCLE, MVPG, MVST, SRST + ; Clobber: CKSM, CFC, CS, CDS, CUUTF, CUTFU, PLO, SPM, STCK, STCKE, TS, TRT, TRE, UPT + + + ;; + ;;- Compare instructions. + ;; + + (define_expand "cmpdi" + [(set (reg:CC 33) + (compare:CC (match_operand:DI 0 "register_operand" "") + (match_operand:DI 1 "general_operand" "")))] + "TARGET_64BIT" + " + { + s390_compare_op0 = operands[0]; + s390_compare_op1 = operands[1]; + DONE; + }") + + (define_expand "cmpsi" + [(set (reg:CC 33) + (compare:CC (match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "general_operand" "")))] + "" + " + { + s390_compare_op0 = operands[0]; + s390_compare_op1 = operands[1]; + DONE; + }") + + ;(define_expand "cmphi" + ; [(set (reg:CC 33) + ; (compare:CC (match_operand:HI 0 "register_operand" "") + ; (match_operand:HI 1 "general_operand" "")))] + ; "" + ; " + ;{ + ; s390_compare_op0 = operands[0]; + ; s390_compare_op1 = operands[1]; + ; DONE; + ;}") + + ;(define_expand "cmpqi" + ; [(set (reg:CC 33) + ; (compare:CC (match_operand:QI 0 "register_operand" "") + ; (match_operand:QI 1 "general_operand" "")))] + ; "" + ; " + ;{ + ; s390_compare_op0 = operands[0]; + ; s390_compare_op1 = operands[1]; + ; DONE; + ;}") + + (define_expand "cmpdf" + [(set (reg:CC 33) + (compare:CC (match_operand:DF 0 "register_operand" "") + (match_operand:DF 1 "general_operand" "")))] + "TARGET_HARD_FLOAT" + " + { + s390_compare_op0 = operands[0]; + s390_compare_op1 = operands[1]; + DONE; + }") + + (define_expand "cmpsf" + [(set (reg:CC 33) + (compare:CC (match_operand:SF 0 "register_operand" "") + (match_operand:SF 1 "general_operand" "")))] + "TARGET_HARD_FLOAT" + " + { + s390_compare_op0 = operands[0]; + s390_compare_op1 = operands[1]; + DONE; + }") + + + ; DI instructions + + (define_insn "*cmpdi_tm2" + [(set (reg 33) + (compare (zero_extract:DI (match_operand:DI 0 "register_operand" "d") + (match_operand:DI 1 "const1_operand" "") + (match_operand:DI 2 "immediate_operand" "I")) + (const_int 0)))] + "s390_match_ccmode(insn, CCTmode) && + INTVAL(operands[2]) >= 0 && INTVAL(operands[2]) < 64" + "* + { + if (INTVAL (operands[2]) > 47) + { + operands[1] = GEN_INT (1 << (63 - INTVAL(operands[2]))); + return \"tmll\\t%0,%x1\"; + } + else if (INTVAL (operands[2]) > 31) + { + operands[1] = GEN_INT (1 << (47 - INTVAL(operands[2]))); + return \"tmlh\\t%0,%x1\"; + } + else if (INTVAL (operands[2]) > 15) + { + operands[1] = GEN_INT (1 << (31 - INTVAL(operands[2]))); + return \"tmhl\\t%0,%x1\"; + } + operands[1] = GEN_INT (1 << (15 - INTVAL(operands[2]))); + return \"tmhh\\t%0,%x1\"; + }" + [(set_attr "op_type" "RX") + (set_attr "type" "xset")]) + + + (define_insn "*cmpdi_tm" + [(set (reg 33) + (compare (and:DI (match_operand:DI 0 "register_operand" "%d") + (match_operand:DI 1 "tmxx_operand" "Lm")) + (const_int 0)))] + "s390_match_ccmode(insn, CCTmode)" + "* + { + unsigned HOST_WIDEST_INT i; + if (GET_CODE (operands[1]) == MEM && + GET_CODE (XEXP (operands[1],0)) == SYMBOL_REF && + CONSTANT_POOL_ADDRESS_P (XEXP (operands[1],0))) + { + operands[1] = get_pool_constant (XEXP (operands[1],0)); + } + + i = (unsigned HOST_WIDEST_INT) INTVAL (operands[1]); + + if (i >= 0x1000000000000ULL) + { + operands[1] = GEN_INT (i >> 48); + return \"tmhh\\t%0,%x1\"; + } + else if (i > 0x100000000ULL) + { + operands[1] = GEN_INT (i >> 32); + return \"tmhl\\t%0,%x1\"; + } + else if (i >= 0x10000ULL) + { + operands[1] = GEN_INT (i >> 16); + return \"tmlh\\t%0,%x1\"; + } + else + return \"tmll\\t%0,%x1\"; + }" + [(set_attr "op_type" "RX") + (set_attr "type" "xset")]) + + + (define_insn "*ltgr" + [(set (reg 33) + (compare (match_operand:DI 0 "register_operand" "d") + (match_operand:DI 1 "const0_operand" ""))) + (set (match_operand:DI 2 "register_operand" "=d") + (match_dup 0))] + "s390_match_ccmode(insn, CCSmode) && TARGET_64BIT" + "ltgr\\t%2,%0" + [(set_attr "op_type" "RRE") + (set_attr "type" "set")]) + + (define_insn "*cmpdi_ccs_0_64" + [(set (reg 33) + (compare (match_operand:DI 0 "register_operand" "d") + (match_operand:DI 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_64BIT" + "ltgr\\t%0,%0" + [(set_attr "op_type" "RRE") + (set_attr "type" "set")]) + + (define_insn "*cmpdi_ccs_0_31" + [(set (reg 33) + (compare (match_operand:DI 0 "register_operand" "d") + (match_operand:DI 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCSmode)" + "srda\\t%0,0" + [(set_attr "op_type" "RS") + (set_attr "type" "set")]) + + (define_insn "*cmpdi_ccs" + [(set (reg 33) + (compare (match_operand:DI 0 "register_operand" "d,d,d") + (match_operand:DI 1 "general_operand" "d,K,m")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_64BIT" + "@ + cgr\\t%0,%1 + cghi\\t%0,%c1 + cg\\t%0,%1" + [(set_attr "op_type" "RRE,RI,RXE") + (set_attr "atype" "reg,reg,mem")]) + + (define_insn "*cmpdi_ccu" + [(set (reg 33) + (compare (match_operand:DI 0 "register_operand" "d,d") + (match_operand:DI 1 "general_operand" "d,m")))] + "s390_match_ccmode(insn, CCUmode) && TARGET_64BIT" + "@ + clgr\\t%0,%1 + clg\\t%0,%1" + [(set_attr "op_type" "RRE,RXE") + (set_attr "atype" "reg,mem")]) + + (define_insn "*cmpdi_ccu_mem" + [(set (reg 33) + (compare (match_operand:DI 0 "s_operand" "oQ") + (match_operand:DI 1 "s_operand" "oQ")))] + "s390_match_ccmode(insn, CCUmode)" + "clc\\t%O0(8,%R0),%1" + [(set_attr "op_type" "SS") + (set_attr "atype" "mem")]) + + ; SI instructions + + (define_insn "*cmpsi_cct" + [(set (reg 33) + (compare (zero_extract:SI (match_operand:SI 0 "register_operand" "%d") + (match_operand:SI 1 "const1_operand" "") + (match_operand:SI 2 "immediate_operand" "I")) + (const_int 0)))] + "s390_match_ccmode(insn, CCTmode) && + INTVAL(operands[2]) >= 0 && INTVAL(operands[2]) < 32" + "* + { + if (INTVAL (operands[2]) > 15) + { + operands[1] = GEN_INT (1 << (31 - INTVAL(operands[2]))); + return \"tml\\t%0,%x1\"; + } + operands[1] = GEN_INT (1 << (15 - INTVAL(operands[2]))); + return \"tmh\\t%0,%x1\"; + }" + [(set_attr "op_type" "RI") + (set_attr "type" "xset")]) + + (define_insn "*cmpsi_tm" + [(set (reg 33) + (compare (and:SI (match_operand:SI 0 "register_operand" "%d") + (match_operand:SI 1 "tmxx_operand" "Lm")) + (const_int 0)))] + "s390_match_ccmode(insn, CCTmode)" + "* + { + unsigned long i; + if (GET_CODE (operands[1]) == MEM && + GET_CODE (XEXP (operands[1],0)) == SYMBOL_REF && + CONSTANT_POOL_ADDRESS_P (XEXP (operands[1],0))) + { + operands[1] = get_pool_constant (XEXP (operands[1],0)); + } + + i = (unsigned long) INTVAL (operands[1]); + if (i > 0xffff) + { + operands[1] = GEN_INT (i / 0x10000); + return \"tmh\\t%0,%x1\"; + } + return \"tml\\t%0,%x1\"; + }" + [(set_attr "op_type" "RX") + (set_attr "type" "xset")]) + + + (define_insn "*ltr" + [(set (reg 33) + (compare (match_operand:SI 0 "register_operand" "d") + (match_operand:SI 1 "const0_operand" ""))) + (set (match_operand:SI 2 "register_operand" "=d") + (match_dup 0))] + "s390_match_ccmode(insn, CCSmode)" + "ltr\\t%2,%0" + [(set_attr "op_type" "RR") + (set_attr "type" "set")]) + + (define_insn "*icm15" + [(set (reg 33) + (compare (match_operand:SI 0 "s_operand" "Qo") + (match_operand:SI 1 "const0_operand" ""))) + (set (match_operand:SI 2 "register_operand" "=d") + (match_dup 0))] + "s390_match_ccmode(insn, CCSmode)" + "icm\\t%2,15,%0" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem") + (set_attr "type" "set")]) + + (define_insn "*icm15_cconly" + [(set (reg 33) + (compare (match_operand:SI 0 "s_operand" "Qo") + (match_operand:SI 1 "const0_operand" ""))) + (clobber (match_scratch:SI 2 "=d"))] + "s390_match_ccmode(insn, CCSmode)" + "icm\\t%2,15,%0" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem") + (set_attr "type" "set")]) + + (define_insn "*cmpsi_ccs_0" + [(set (reg 33) + (compare (match_operand:SI 0 "register_operand" "d") + (match_operand:SI 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCSmode)" + "ltr\\t%0,%0" + [(set_attr "op_type" "RR") + (set_attr "type" "set")]) + + (define_insn "*cmpsidi_ccs" + [(set (reg 33) + (compare (match_operand:SI 0 "register_operand" "d") + (sign_extend:SI (match_operand:HI 1 "memory_operand" "m"))))] + "s390_match_ccmode(insn, CCSmode)" + "ch\\t%0,%1" + [(set_attr "op_type" "RR") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + (define_insn "*cmpsi_ccs" + [(set (reg 33) + (compare (match_operand:SI 0 "register_operand" "d,d,d") + (match_operand:SI 1 "general_operand" "d,K,m")))] + "s390_match_ccmode(insn, CCSmode)" + "@ + cr\\t%0,%1 + chi\\t%0,%c1 + c\\t%0,%1" + [(set_attr "op_type" "RR,RI,RX") + (set_attr "atype" "reg,reg,mem") + (set_attr "type" "xset,xset,xset")]) + + (define_insn "*cmpsi_ccu" + [(set (reg 33) + (compare (match_operand:SI 0 "register_operand" "d,d") + (match_operand:SI 1 "general_operand" "d,m")))] + "s390_match_ccmode(insn, CCUmode)" + "@ + clr\\t%0,%1 + cl\\t%0,%1" + [(set_attr "op_type" "RR,RX") + (set_attr "atype" "reg,mem")]) + + (define_insn "*cmpsi_ccu_mem" + [(set (reg 33) + (compare (match_operand:SI 0 "s_operand" "oQ") + (match_operand:SI 1 "s_operand" "oQ")))] + "s390_match_ccmode(insn, CCUmode)" + "clc\\t%O0(4,%R0),%1" + [(set_attr "op_type" "SS") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + + ; HI instructions + + (define_insn "*icm3" + [(set (reg 33) + (compare (match_operand:HI 0 "s_operand" "Qo") + (match_operand:HI 1 "const0_operand" ""))) + (set (match_operand:HI 2 "register_operand" "=d") + (match_dup 0))] + "s390_match_ccmode(insn, CCSmode)" + "icm\\t%2,3,%0" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem") + (set_attr "type" "set")]) + + (define_insn "*cmphi_cct_0" + [(set (reg 33) + (compare (match_operand:HI 0 "register_operand" "d") + (match_operand:HI 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCTmode)" + "tml\\t%0,65535" + [(set_attr "op_type" "RX") + (set_attr "type" "xset")]) + + (define_insn "*cmphi_ccs_0" + [(set (reg 33) + (compare (match_operand:HI 0 "s_operand" "Qo") + (match_operand:HI 1 "const0_operand" ""))) + (clobber (match_scratch:HI 2 "=d"))] + "s390_match_ccmode(insn, CCSmode)" + "icm\\t%2,3,%0" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem") + (set_attr "type" "set")]) + + (define_insn "*cmphi_ccu" + [(set (reg 33) + (compare (match_operand:HI 0 "register_operand" "d") + (match_operand:HI 1 "s_operand" "Qo")))] + "s390_match_ccmode(insn, CCUmode)" + "clm\\t%0,3,%1" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + (define_insn "*cmphi_ccu_mem" + [(set (reg 33) + (compare (match_operand:HI 0 "s_operand" "oQ") + (match_operand:HI 1 "s_operand" "oQ")))] + "s390_match_ccmode(insn, CCUmode)" + "clc\\t%O0(2,%R0),%1" + [(set_attr "op_type" "SS") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + + ; QI instructions + + (define_insn "*icm1" + [(set (reg 33) + (compare (match_operand:QI 0 "s_operand" "Qo") + (match_operand:QI 1 "const0_operand" ""))) + (set (match_operand:QI 2 "register_operand" "=d") + (match_dup 0))] + "s390_match_ccmode(insn, CCSmode)" + "icm\\t%2,1,%0" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem") + (set_attr "type" "set")]) + + (define_insn "*tm_0" + [(set (reg 33) + (compare (zero_extend:SI (and:QI (match_operand:QI 0 "s_operand" "Qo") + (match_operand:QI 1 "immediate_operand" ""))) + (const_int 0)))] + "s390_match_ccmode(insn, CCTmode) && + INTVAL(operands[1]) >= 0 && INTVAL(operands[1]) < 256" + "tm\\t%0,%1" + [(set_attr "op_type" "RI") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + (define_insn "*cmpqi_cct_0" + [(set (reg 33) + (compare (match_operand:QI 0 "register_operand" "d") + (match_operand:QI 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCTmode)" + "tml\\t%0,255" + [(set_attr "op_type" "RI") + (set_attr "type" "xset")]) + + (define_insn "*cmpqi_ccs_0" + [(set (reg 33) + (compare (match_operand:QI 0 "s_operand" "Qo") + (match_operand:QI 1 "const0_operand" ""))) + (clobber (match_scratch:QI 2 "=d"))] + "s390_match_ccmode(insn, CCSmode)" + "icm\\t%2,1,%0" + [(set_attr "op_type" "RS") + (set_attr "type" "xset")]) + + (define_insn "*cmpqi_ccu_0" + [(set (reg 33) + (compare (match_operand:QI 0 "s_operand" "Qo") + (match_operand:QI 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCUmode)" + "cli\\t%0,0" + [(set_attr "op_type" "SI") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + (define_insn "*cmpqi_ccu" + [(set (reg 33) + (compare (match_operand:QI 0 "register_operand" "d") + (match_operand:QI 1 "s_operand" "Qo")))] + "s390_match_ccmode(insn, CCUmode)" + "clm\\t%0,1,%1" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + (define_insn "*cmpqi_ccu_immed" + [(set (reg 33) + (compare (match_operand:QI 0 "s_operand" "Qo") + (match_operand:QI 1 "immediate_operand" "")))] + "s390_match_ccmode(insn, CCUmode) && + INTVAL(operands[1]) >= 0 && INTVAL(operands[1]) < 256" + "cli\\t%0,%1" + [(set_attr "op_type" "SI") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + (define_insn "*cmpqi_ccu_mem" + [(set (reg 33) + (compare (match_operand:QI 0 "s_operand" "oQ") + (match_operand:QI 1 "s_operand" "oQ")))] + "s390_match_ccmode(insn, CCUmode)" + "clc\\t%O0(1,%R0),%1" + [(set_attr "op_type" "SS") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + + ; DF instructions + + (define_insn "*cmpdf_ccs_0" + [(set (reg 33) + (compare (match_operand:DF 0 "register_operand" "f") + (match_operand:DF 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" + "ltdbr\\t%0,%0" + [(set_attr "op_type" "RR") + (set_attr "type" "set")]) + + (define_insn "*cmpdf_ccs_0_ibm" + [(set (reg 33) + (compare (match_operand:DF 0 "register_operand" "f") + (match_operand:DF 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" + "ltdr\\t%0,%0" + [(set_attr "op_type" "RR") + (set_attr "type" "set")]) + + (define_insn "*cmpdf_ccs" + [(set (reg 33) + (compare (match_operand:DF 0 "register_operand" "f,f") + (match_operand:DF 1 "nonimmediate_operand" "f,m")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" + "@ + cdbr\\t%0,%1 + cdb\\t%0,%1" + [(set_attr "op_type" "RR,RX") + (set_attr "atype" "reg,mem") + (set_attr "type" "xset,xset")]) + + (define_insn "*cmpdf_ccs_ibm" + [(set (reg 33) + (compare (match_operand:DF 0 "register_operand" "f,f") + (match_operand:DF 1 "nonimmediate_operand" "f,m")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" + "@ + cdr\\t%0,%1 + cd\\t%0,%1" + [(set_attr "op_type" "RR,RX") + (set_attr "atype" "reg,mem") + (set_attr "type" "xset,xset")]) + + + ; SF instructions + + (define_insn "*cmpsf_ccs_0" + [(set (reg 33) + (compare (match_operand:SF 0 "register_operand" "f") + (match_operand:SF 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" + "ltebr\\t%0,%0" + [(set_attr "op_type" "RR") + (set_attr "type" "set")]) + + (define_insn "*cmpsf_ccs_0_ibm" + [(set (reg 33) + (compare (match_operand:SF 0 "register_operand" "f") + (match_operand:SF 1 "const0_operand" "")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" + "lter\\t%0,%0" + [(set_attr "op_type" "RR") + (set_attr "type" "set")]) + + (define_insn "*cmpsf_ccs" + [(set (reg 33) + (compare (match_operand:SF 0 "register_operand" "f,f") + (match_operand:SF 1 "nonimmediate_operand" "f,m")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" + "@ + cebr\\t%0,%1 + ceb\\t%0,%1" + [(set_attr "op_type" "RR,RX") + (set_attr "atype" "reg,mem") + (set_attr "type" "xset,xset")]) + + (define_insn "*cmpsf_ccs" + [(set (reg 33) + (compare (match_operand:SF 0 "register_operand" "f,f") + (match_operand:SF 1 "nonimmediate_operand" "f,m")))] + "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" + "@ + cer\\t%0,%1 + ce\\t%0,%1" + [(set_attr "op_type" "RR,RX") + (set_attr "atype" "reg,mem") + (set_attr "type" "xset,xset")]) + + + ;; + ;;- Move instructions. + ;; + + ; + ; movti instruction pattern(s). + ; + + (define_insn "movti" + [(set (match_operand:TI 0 "nonimmediate_operand" "=d,d,d,m,Q") + (match_operand:TI 1 "general_operand" "d,K,m,d,Q"))] + "TARGET_64BIT" + "* + { + switch (which_alternative) + { + case 0: /* d <- d */ + if (REGNO (operands[0]) == REGNO (operands[1]) + 1) + return \"lgr\\t%M0,%M1\;lgr\\t%0,%1\"; + else + return \"lgr\\t%0,%1\;lgr\\t%M0,%M1\"; + + case 1: /* d <- K */ + if (INTVAL(operands[1]) < 0) + return \"lghi\\t%0,-1\;lghi\\t%M0,%h1\"; + else + return \"lghi\\t%0,0\;lghi\\t%M0,%h1\"; + + case 2: /* d <- m */ + if (s_operand (operands[1], GET_MODE (operands[1]))) + return \"lmg\\t%0,%M0,%1\"; + else + return \"la\\t%M0,%1\;lmg\\t%0,%M0,0(%M0)\"; + + case 3: /* m <- d */ + if (!s_operand (operands[0], GET_MODE (operands[0]))) + return \"stg\\t%1,%0\;stg\\t%M1,%M0\"; + else + return \"stmg\\t%1,%M1,%0\"; + + case 4: /* m <- m */ + return \"mvc\\t%O0(16,%R0),%1\"; + } + }" + [(set_attr "op_type" "NN,NN,RS,RS,SS") + (set_attr "atype" "reg,reg,mem,mem,mem") + (set_attr "type" "set") + (set_attr "length" "12,8,10,10,*")]) + + ; + ; movdi instruction pattern(s). + ; + + ;; If generating PIC code and operands[1] is a symbolic CONST, emit a + ;; move to get the address of the symbolic object from the GOT. + + (define_expand "movdi" + [(set (match_operand:DI 0 "general_operand" "") + (match_operand:DI 1 "general_operand" ""))] + "" + " + { + if (CONSTANT_P (operands[1]) + && !LEGITIMATE_CONSTANT_P (operands[1])) + operands[1] = force_const_mem (DImode, operands[1]); + + if (TARGET_64BIT && flag_pic && SYMBOLIC_CONST (operands[1])) + emit_pic_move (operands, DImode); + }") + + (define_insn "*movdi_64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,m,Q") + (match_operand:DI 1 "general_operand" "d,K,S,m,d,Q"))] + "TARGET_64BIT" + "@ + lgr\\t%0,%1 + lghi\\t%0,%h1 + larl\\t%0,%1 + lg\\t%0,%1 + stg\\t%1,%0 + mvc\\t%O0(8,%R0),%1" + [(set_attr "op_type" "RRE,RI,RIL,RXE,RXE,SS") + (set_attr "atype" "reg,reg,reg,mem,mem,mem") + (set_attr "type" "set,set,la,set,set,set")]) + + (define_insn "*movdi_31" + [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,m,Q") + (match_operand:DI 1 "general_operand" "d,K,m,d,Q"))] + "!TARGET_64BIT" + "* + { + switch (which_alternative) + { + case 0: /* d <- d */ + if (REGNO (operands[0]) == REGNO (operands[1]) + 1) + return \"lr\\t%N0,%N1\;lr\\t%0,%1\"; + else + return \"lr\\t%0,%1\;lr\\t%N0,%N1\"; + + case 1: /* d <- K */ + if (INTVAL (operands[1]) < 0) + return \"lhi\\t%0,-1\;lhi\\t%N0,%h1\"; + else + return \"lhi\\t%0,0\;lhi\\t%N0,%h1\"; + + case 2: /* d <- m */ + if (s_operand (operands[1], GET_MODE (operands[1]))) + return \"lm\\t%0,%N0,%1\"; + else + return \"la\\t%N0,%1\;lm\\t%0,%N0,0(%N0)\"; + + case 3: /* m <- d */ + if (s_operand (operands[0], GET_MODE (operands[0]))) + return \"stm\\t%1,%N1,%0\"; + else + return \"st\\t%1,%0\;st\\t%N1,%N0\"; + + case 4: /* m <- m */ + return \"mvc\\t%O0(8,%R0),%1\"; + } + }" + [(set_attr "op_type" "NN,NN,RS,RS,SS") + (set_attr "atype" "reg,reg,mem,mem,mem") + (set_attr "type" "set") + (set_attr "length" "4,8,8,8,*")]) + + + ; + ; movsi instruction pattern(s). + ; + + ;; If generating PIC code and operands[1] is a symbolic CONST, emit a + ;; move to get the address of the symbolic object from the GOT. + + (define_expand "movsi" + [(set (match_operand:SI 0 "general_operand" "") + (match_operand:SI 1 "general_operand" ""))] + "" + " + { + if (CONSTANT_P (operands[1]) + && !LEGITIMATE_CONSTANT_P (operands[1])) + operands[1] = force_const_mem (SImode, operands[1]); + + if (flag_pic && SYMBOLIC_CONST (operands[1])) + emit_pic_move (operands, SImode); + }") + + (define_insn "*movsi" + [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,d,m,Q") + (match_operand:SI 1 "general_operand" "d,K,m,d,Q"))] + "" + "@ + lr\\t%0,%1 + lhi\\t%0,%h1 + l\\t%0,%1 + st\\t%1,%0 + mvc\\t%O0(4,%R0),%1" + [(set_attr "op_type" "RR,RI,RX,RX,SS") + (set_attr "atype" "reg,reg,mem,mem,mem") + (set_attr "type" "set")]) + + + ; + ; movhi instruction pattern(s). + ; + + (define_insn "movhi" + [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,d,m") + (match_operand:HI 1 "r_or_x_or_im16_operand" "d,K,m,d"))] + "" + "@ + lr\\t%0,%1 + lhi\\t%0,%h1 + lh\\t%0,%1 + sth\\t%1,%0" + [(set_attr "op_type" "RR,RI,RX,RX") + (set_attr "atype" "reg,reg,mem,mem") + (set_attr "type" "xset")]) + + + ; + ; movqi instruction pattern(s). + ; + + (define_insn "movqi_64" + [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q") + (match_operand:QI 1 "general_operand" "d,K,m,d,n"))] + "TARGET_64BIT" + "@ + lr\\t%0,%1 + llill\\t%0,%x1 + llgc\\t%0,%1 + stc\\t%1,%0 + mvi\\t%0,%b1" + [(set_attr "op_type" "RR,RI,RXE,RX,SI") + (set_attr "atype" "reg,reg,mem,mem,mem") + (set_attr "type" "xset")]) + + + (define_insn "movqi" + [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q") + (match_operand:QI 1 "r_or_x_or_im16_operand" "d,n,m,d,n"))] + "" + "@ + lr\\t%0,%1 + lhi\\t%0,%c1 + ic\\t%0,%1 + stc\\t%1,%0 + mvi\\t%0,%b1" + [(set_attr "op_type" "RR,RX,RX,RX,SI") + (set_attr "atype" "reg,reg,mem,mem,mem") + (set_attr "type" "xset")]) + + + ; + ; moveqstrictqi instruction pattern(s). + ; + + (define_insn "*movstrictqi" + [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+d,m")) + (match_operand:QI 1 "nonimmediate_operand" "m,d"))] + "" + "@ + ic\\t%0,%1 + stc\\t%1,%0" + [(set_attr "op_type" "RX,RX") + (set_attr "atype" "mem,mem")]) + + + ; + ; movstricthi instruction pattern(s). + ; + + (define_insn "*movstricthi" + [(set (strict_low_part (match_operand:HI 0 "r_or_s_operand" "+d,Q")) + (match_operand:HI 1 "r_or_s_operand" "Q,d")) + (clobber (reg:CC 33))] + "" + "@ + icm\\t%0,3,%1 + stcm\\t%1,3,%0" + [(set_attr "op_type" "RS,RS") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + + ; + ; movstrictsi instruction pattern(s). + ; + + (define_insn "movestrictsi" + [(set (strict_low_part (match_operand:SI 0 "nonimmediate_operand" "+d,d,m")) + (match_operand:SI 1 "nonimmediate_operand" "d,m,d"))] + "TARGET_64BIT" + "@ + lr\\t%0,%1 + l\\t%0,%1 + st\\t%1,%0" + [(set_attr "op_type" "RR,RS,RS") + (set_attr "atype" "reg,mem,mem") + (set_attr "type" "xset")]) + + + ; + ; movdf instruction pattern(s). + ; + + (define_expand "movdf" + [(set (match_operand:DF 0 "nonimmediate_operand" "") + (match_operand:DF 1 "general_operand" ""))] + "" + " + { + if (GET_CODE (operands[1]) == CONST_DOUBLE) + operands[1] = force_const_mem (DFmode, operands[1]); + }") + + (define_insn "*movdf_64" + [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,m,d,Q") + (match_operand:DF 1 "general_operand" "f,m,f,m,d,d,Q"))] + "TARGET_64BIT && TARGET_HARD_FLOAT" + "@ + ldr\\t%0,%1 + ld\\t%0,%1 + std\\t%1,%0 + lg\\t%0,%1 + stg\\t%1,%0 + lgr\\t%0,%1 + mvc\\t%O0(8,%R0),%1" + [(set_attr "op_type" "RR,RX,RX,RXE,RXE,RR,SS") + (set_attr "atype" "reg,mem,mem,mem,mem,mem,mem") + (set_attr "type" "xset")]) + + (define_insn "*movdf_31" + [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,m,d,Q") + (match_operand:DF 1 "general_operand" "f,m,f,m,d,d,Q"))] + "TARGET_HARD_FLOAT" + "* + { + switch (which_alternative) + { + case 0: /* f <- f */ + return \"ldr\\t%0,%1\"; + + case 1: /* f <- m */ + return \"ld\\t%0,%1\"; + + case 2: /* m <- f */ + return \"std\\t%1,%0\"; + + case 3: /* d <- m */ + if (s_operand (operands[1], GET_MODE (operands[1]))) + return \"lm\\t%0,%N0,%1\"; + else + return \"la\\t%N0,%1\;lm\\t%0,%N0,0(%N0)\"; + + case 4: /* m <- d */ + if (s_operand (operands[0], GET_MODE (operands[0]))) + return \"stm\\t%1,%N1,%0\"; + else + return \"st\\t%1,%0\;st\\t%N1,%N0\"; + + case 5: /* d <- d */ + if (REGNO (operands[0]) == REGNO (operands[1]) + 1) + return \"lr\\t%N0,%N1\;lr\\t%0,%1\"; + else + return \"lr\\t%0,%1\;lr\\t%N0,%N1\"; + + case 6: /* m <- m */ + return \"mvc\\t%O0(8,%R0),%1\"; + } + }" + [(set_attr "op_type" "RR,RX,RX,RS,RS,NN,SS") + (set_attr "atype" "reg,mem,mem,mem,mem,reg,mem") + (set_attr "length" "*,*,*,*,*,4,*")]) + + (define_insn "*movdf_soft_64" + [(set (match_operand:DF 0 "nonimmediate_operand" "=d,m,d,Q") + (match_operand:DF 1 "general_operand" "m,d,d,Q"))] + "TARGET_64BIT && TARGET_SOFT_FLOAT" + "@ + lg\\t%0,%1 + stg\\t%1,%0 + lgr\\t%0,%1 + mvc\\t%O0(8,%R0),%1" + [(set_attr "op_type" "RXE,RXE,RR,SS") + (set_attr "atype" "mem,mem,mem,mem") + (set_attr "type" "xset")]) + + (define_insn "*movdf_soft_31" + [(set (match_operand:DF 0 "nonimmediate_operand" "=!d,d,m,Q") + (match_operand:DF 1 "general_operand" "!d,m,d,Q"))] + "TARGET_SOFT_FLOAT" + "* + { + switch (which_alternative) + { + case 0: /* d <- d */ + if (REGNO (operands[0]) == REGNO (operands[1]) + 1) + return \"lr\\t%N0,%N1\;lr\\t%0,%1\"; + else + return \"lr\\t%0,%1\;lr\\t%N0,%N1\"; + + case 1: /* d <- m */ + if (s_operand (operands[1], GET_MODE (operands[1]))) + return \"lm\\t%0,%N0,%1\"; + else + return \"la\\t%N0,%1\;lm\\t%0,%N0,0(%N0)\"; + + case 2: /* m <- d */ + if (s_operand (operands[0], GET_MODE (operands[0]))) + return \"stm\\t%1,%N1,%0\"; + else + return \"st\\t%1,%0\;st\\t%N1,%N0\"; + + case 3: /* m <- m */ + return \"mvc\\t%O0(8,%R0),%1\"; + } + }" + [(set_attr "op_type" "NN,RS,RS,SS") + (set_attr "atype" "reg,mem,mem,mem") + (set_attr "length" "8,*,*,*")]) + + + ; + ; movsf instruction pattern(s). + ; + + (define_expand "movsf" + [(set (match_operand:SF 0 "nonimmediate_operand" "") + (match_operand:SF 1 "general_operand" ""))] + "" + " + { + if (GET_CODE (operands[1]) == CONST_DOUBLE) + operands[1] = force_const_mem (SFmode, operands[1]); + }") + + (define_insn "*movsf_64" + [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,m,d,m,d,Q") + (match_operand:SF 1 "general_operand" "f,m,f,m,d,d,Q"))] + "TARGET_64BIT && TARGET_HARD_FLOAT" + "@ + ler\\t%0,%1 + le\\t%0,%1 + ste\\t%1,%0 + llgf\\t%0,%1 + st\\t%1,%0 + lgr\\t%0,%1 + mvc\\t%O0(4,%R0),%1" + [(set_attr "op_type" "RR,RX,RX,RXE,RX,RR,SS") + (set_attr "atype" "reg,mem,mem,mem,mem,reg,mem")]) + + (define_insn "*movsf_31" + [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,m,d,m,d,Q") + (match_operand:SF 1 "general_operand" "f,m,f,m,d,d,Q"))] + "TARGET_HARD_FLOAT" + "@ + ler\\t%0,%1 + le\\t%0,%1 + ste\\t%1,%0 + l\\t%0,%1 + st\\t%1,%0 + lr\\t%0,%1 + mvc\\t%O0(4,%R0),%1" + [(set_attr "op_type" "RR,RX,RX,RX,RX,RR,SS") + (set_attr "atype" "reg,mem,mem,mem,mem,reg,mem")]) + + (define_insn "*movsf_soft" + [(set (match_operand:SF 0 "nonimmediate_operand" "=d,d,m,Q") + (match_operand:SF 1 "general_operand" "d,m,d,Q"))] + "TARGET_SOFT_FLOAT" + "@ + lr\\t%0,%1 + l\\t%0,%1 + st\\t%1,%0 + mvc\\t%O0(4,%R0),%1" + [(set_attr "op_type" "RR,RX,RX,SS") + (set_attr "atype" "reg,mem,mem,mem")]) + ; + ; load_multiple pattern(s). + ; + + (define_expand "load_multiple" + [(match_par_dup 3 [(set (match_operand 0 "" "") + (match_operand 1 "" "")) + (use (match_operand 2 "" ""))])] + "" + " + { + int regno; + int count; + rtx from; + int i; + + /* Support only loading a constant number of fixed-point registers from + memory and only bother with this if more than two */ + if (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) <= 2 + || INTVAL (operands[2]) > 16 + || GET_CODE (operands[1]) != MEM + || GET_CODE (operands[0]) != REG + || REGNO (operands[0]) >= 16) + FAIL; + + count = INTVAL (operands[2]); + regno = REGNO (operands[0]); + + operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); + from = force_reg (Pmode, XEXP (operands[1], 0)); + + for (i = 0; i < count; i++) + XVECEXP (operands[3], 0, i) + = gen_rtx_SET (VOIDmode, gen_rtx_REG (Pmode, regno + i), + change_address (operands[1], Pmode, + plus_constant (from, i * 4))); + }") + + (define_insn "*load_multiple_di" + [(match_parallel 0 "load_multiple_operation" + [(set (match_operand:DI 1 "register_operand" "=r") + (match_operand:DI 2 "s_operand" "oQ"))])] + "" + "* + { + int words = XVECLEN (operands[0], 0); + + if (XVECLEN (operands[0], 0) == 1) + return \"lg\\t%1,0(%2)\"; + + operands[0] = gen_rtx_REG (DImode, REGNO (operands[1]) + words - 1); + return \"lmg\\t%1,%0,%2\"; + }" + [(set_attr "op_type" "RXE") + (set_attr "atype" "mem") + (set_attr "type" "set")]) + + (define_insn "*load_multiple_si" + [(match_parallel 0 "load_multiple_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (match_operand:SI 2 "s_operand" "oQ"))])] + "" + "* + { + int words = XVECLEN (operands[0], 0); + + if (XVECLEN (operands[0], 0) == 1) + return \"l\\t%1,0(%2)\"; + + operands[0] = gen_rtx_REG (SImode, REGNO (operands[1]) + words - 1); + return \"lm\\t%1,%0,%2\"; + }" + [(set_attr "op_type" "RXE") + (set_attr "atype" "mem") + (set_attr "type" "set")]) + + ; + ; store multiple pattern(s). + ; + + (define_expand "store_multiple" + [(match_par_dup 3 [(set (match_operand 0 "" "") + (match_operand 1 "" "")) + (use (match_operand 2 "" ""))])] + "" + " + { + int regno; + int count; + rtx to; + int i; + + /* Support only storing a constant number of fixed-point registers to + memory and only bother with this if more than two. */ + if (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) <= 2 + || INTVAL (operands[2]) > 16 + || GET_CODE (operands[0]) != MEM + || GET_CODE (operands[1]) != REG + || REGNO (operands[1]) >= 16) + FAIL; + + count = INTVAL (operands[2]); + regno = REGNO (operands[1]); + + operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); + to = force_reg (Pmode, XEXP (operands[0], 0)); + + for (i = 0; i < count; i++) + XVECEXP (operands[3], 0, i) + = gen_rtx_SET (VOIDmode, + change_address (operands[0], Pmode, + plus_constant (to, i * 4)), + gen_rtx_REG (Pmode, regno + i)); + }") + + (define_insn "*store_multiple_di" + [(match_parallel 0 "store_multiple_operation" + [(set (match_operand:DI 1 "s_operand" "=oQ") + (match_operand:DI 2 "register_operand" "r"))])] + "" + "* + { + int words = XVECLEN (operands[0], 0); + + if (XVECLEN (operands[0], 0) == 1) + return \"stg\\t%1,0(%2)\"; + + operands[0] = gen_rtx_REG (DImode, REGNO (operands[2]) + words - 1); + return \"stmg\\t%2,%0,%1\"; + }" + [(set_attr "op_type" "RXE") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + + (define_insn "*store_multiple_si" + [(match_parallel 0 "store_multiple_operation" + [(set (match_operand:SI 1 "s_operand" "=oQ") + (match_operand:SI 2 "register_operand" "r"))])] + "" + "* + { + int words = XVECLEN (operands[0], 0); + + if (XVECLEN (operands[0], 0) == 1) + return \"st\\t%1,0(%2)\"; + + operands[0] = gen_rtx_REG (SImode, REGNO (operands[2]) + words - 1); + return \"stm\\t%2,%0,%1\"; + }" + [(set_attr "op_type" "RXE") + (set_attr "atype" "mem") + (set_attr "type" "xset")]) + + ;; + ;; String instructions. + ;; + + ; + ; movstrdi instruction pattern(s). + ; + + (define_expand "movstrdi" + [(set (match_operand:BLK 0 "general_operand" "") + (match_operand:BLK 1 "general_operand" "")) + (use (match_operand:DI 2 "general_operand" "")) + (match_operand 3 "" "")] + "TARGET_64BIT" + " + { + rtx addr0, addr1; + + addr0 = force_operand (XEXP (operands[0], 0), NULL_RTX); + addr1 = force_operand (XEXP (operands[1], 0), NULL_RTX); + + if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) <= 256) + { + operands[0] = change_address (operands[0], VOIDmode, addr0); + operands[1] = change_address (operands[1], VOIDmode, addr1); + operands[2] = GEN_INT (INTVAL (operands[2]) - 1); + + emit_insn (gen_movstrsico (operands[0], operands[1], operands[2])); + DONE; + } + else + { + if (TARGET_MVCLE) + { + /* implementation suggested by Richard Henderson */ + rtx reg0 = gen_reg_rtx (TImode); + rtx reg1 = gen_reg_rtx (TImode); + rtx len = operands[2]; + + if (! CONSTANT_P (len)) + len = force_reg (DImode, len); + + /* Load up the address+length pairs. */ + + emit_move_insn (gen_rtx_SUBREG (DImode, reg0, 0), addr0); + emit_move_insn (gen_rtx_SUBREG (DImode, reg0, 1), len); + + emit_move_insn (gen_rtx_SUBREG (DImode, reg1, 0), addr1); + emit_move_insn (gen_rtx_SUBREG (DImode, reg1, 1), len); + + /* MOVE */ + emit_insn (gen_movstrdi_64 (reg0, reg1)); + DONE; + } + else + { + rtx label = gen_label_rtx (); + rtx reg0, reg1, len; + + reg0 = gen_reg_rtx (DImode); + reg1 = gen_reg_rtx (DImode); + len = gen_reg_rtx (DImode); + + emit_move_insn (len, operands[2]); + emit_insn (gen_cmpdi (len, const0_rtx)); + emit_jump_insn (gen_beq (label)); + emit_move_insn (reg0, addr0); + emit_move_insn (reg1, addr1); + emit_insn (gen_adddi3 (len, len, constm1_rtx)); + emit_insn (gen_movstrdix_64 (reg0, reg1, len)); + emit_label (label); + DONE; + } + } + }") + + ; + ; movstrsi instruction pattern(s). + ; + + (define_expand "movstrsi" + [(set (match_operand:BLK 0 "general_operand" "") + (match_operand:BLK 1 "general_operand" "")) + (use (match_operand:SI 2 "general_operand" "")) + (match_operand 3 "" "")] + "" + " + { + rtx addr0 = force_operand (XEXP (operands[0], 0), NULL_RTX); + rtx addr1 = force_operand (XEXP (operands[1], 0), NULL_RTX); + + if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) <= 256) + { + operands[0] = change_address (operands[0], VOIDmode, addr0); + operands[1] = change_address (operands[1], VOIDmode, addr1); + operands[2] = GEN_INT (INTVAL (operands[2]) - 1); + + emit_insn (gen_movstrsico (operands[0], operands[1], operands[2])); + DONE; + } + else + { + if (TARGET_64BIT) + FAIL; + + if (TARGET_MVCLE) + { + /* implementation suggested by Richard Henderson */ + rtx reg0 = gen_reg_rtx (DImode); + rtx reg1 = gen_reg_rtx (DImode); + rtx len = operands[2]; + + + if (! CONSTANT_P (len)) + len = force_reg (SImode, len); + + /* Load up the address+length pairs. */ + + emit_move_insn (gen_rtx_SUBREG (SImode, reg0, 0), addr0); + emit_move_insn (gen_rtx_SUBREG (SImode, reg0, 1), len); + + emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0), addr1); + emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 1), len); + + /* MOVE */ + emit_insn (gen_movstrsi_31 (reg0, reg1)); + DONE; + } + else + { + rtx label = gen_label_rtx (); + rtx reg0, reg1, len; + + reg0 = gen_reg_rtx (SImode); + reg1 = gen_reg_rtx (SImode); + len = gen_reg_rtx (SImode); + + emit_move_insn (len, operands[2]); + emit_insn (gen_cmpsi (len, const0_rtx)); + emit_jump_insn (gen_beq (label)); + emit_move_insn (reg0, addr0); + emit_move_insn (reg1, addr1); + emit_insn (gen_addsi3 (len, len, constm1_rtx)); + emit_insn (gen_movstrsix_31 (reg0, reg1, len)); + emit_label (label); + DONE; + } + } + }") + + ; Move a block that is less than 256 bytes in length. + + (define_insn "movstrsico" + [(set (match_operand:BLK 0 "s_operand" "=oQ") + (match_operand:BLK 1 "s_operand" "oQ")) + (use (match_operand 2 "const_int_operand" "I"))] + "((unsigned) INTVAL (operands[2]) < 256)" + "mvc\\t%O0(%c2+1,%R0),%1" + [(set_attr "op_type" "SS") + (set_attr "atype" "mem")]) + + ; Move a block that is more than 256 bytes in lenght or length in register + + (define_insn "movstrdix_64" + [(set (mem:BLK (match_operand:DI 0 "register_operand" "a")) + (mem:BLK (match_operand:DI 1 "register_operand" "a"))) + (use (match_operand:DI 2 "register_operand" "a")) + (clobber (match_dup 0)) + (clobber (match_dup 1)) + (clobber (match_scratch:DI 3 "=&a")) + (clobber (reg:CC 33))] + "" + "* + { + rtx xop[4]; + xop[0] = gen_label_rtx (); + xop[1] = gen_label_rtx (); + xop[2] = gen_label_rtx (); + xop[3] = operands[3]; + output_asm_insn (\"srag\\t%3,%2,8\",operands); + output_asm_insn (\"jz\\t%l1\",xop); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xop[0])); + output_asm_insn (\"mvc\\t0(256,%0),0(%1)\",operands); + output_asm_insn (\"la\\t%0,256(%0)\",operands); + output_asm_insn (\"la\\t%1,256(%1)\",operands); + xop[3] = operands[3]; + output_asm_insn (\"brct\\t%3,%l0\",xop); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xop[1])); + xop[3] = operands[3]; + output_asm_insn (\"bras\\t%3,%l2\",xop); + output_asm_insn (\"mvc\\t0(1,%0),0(%1)\",operands); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xop[2])); + return \"ex\\t%2,0(%3)\"; + }" + [(set_attr "op_type" "NN") + (set_attr "atype" "mem") + (set_attr "length" "44")]) + + (define_insn "movstrsix_31" + [(set (mem:BLK (match_operand:SI 0 "register_operand" "a")) + (mem:BLK (match_operand:SI 1 "register_operand" "a"))) + (use (match_operand:SI 2 "register_operand" "a")) + (clobber (match_dup 0)) + (clobber (match_dup 1)) + (clobber (match_scratch:SI 3 "=&a")) + (clobber (reg:CC 33))] + "" + "* + { + rtx xop[4]; + xop[0] = gen_label_rtx (); + xop[1] = gen_label_rtx (); + xop[2] = gen_label_rtx (); + xop[3] = operands[3]; + output_asm_insn (\"lr\\t%3,%2\",operands); + output_asm_insn (\"sra\\t%3,8\",operands); + output_asm_insn (\"jz\\t%l1\",xop); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xop[0])); + output_asm_insn (\"mvc\\t0(256,%0),0(%1)\",operands); + output_asm_insn (\"la\\t%0,256(%0)\",operands); + output_asm_insn (\"la\\t%1,256(%1)\",operands); + xop[3] = operands[3]; + output_asm_insn (\"brct\\t%3,%l0\",xop); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xop[1])); + xop[3] = operands[3]; + output_asm_insn (\"bras\\t%3,%l2\",xop); + output_asm_insn (\"mvc\\t0(1,%0),0(%1)\",operands); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (xop[2])); + return \"ex\\t%2,0(%3)\"; + }" + [(set_attr "op_type" "NN") + (set_attr "length" "42") + (set_attr "atype" "mem")]) + + ; Move a block that is larger than 255 bytes in length. + + (define_insn "movstrdi_64" + [(set (mem:BLK (subreg:DI (match_operand:TI 0 "register_operand" "d") 0)) + (mem:BLK (subreg:DI (match_operand:TI 1 "register_operand" "d") 0))) + (clobber (match_dup 0)) + (clobber (match_dup 1)) + (clobber (reg:CC 33))] + "" + "mvcle\\t%0,%1,0\;jo\\t.-4" + [(set_attr "op_type" "NN") + (set_attr "atype" "mem") + (set_attr "length" "8")]) + + (define_insn "movstrsi_31" + [(set (mem:BLK (subreg:SI (match_operand:DI 0 "register_operand" "d") 0)) + (mem:BLK (subreg:SI (match_operand:DI 1 "register_operand" "d") 0))) + (clobber (match_dup 0)) + (clobber (match_dup 1)) + (clobber (reg:CC 33))] + "" + "mvcle\\t%0,%1,0\;jo\\t.-4" + [(set_attr "op_type" "NN") + (set_attr "atype" "mem") + (set_attr "length" "8")]) + + ; + ; clrstrdi instruction pattern(s). + ; + + (define_expand "clrstrdi" + [(set (match_operand:BLK 0 "general_operand" "") + (const_int 0)) + (use (match_operand:DI 1 "general_operand" "")) + (match_operand 2 "" "")] + "TARGET_64BIT" + " + { + rtx addr = force_operand (XEXP (operands[0], 0), NULL_RTX); + + operands[0] = change_address (operands[0], VOIDmode, addr); + + if (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) < 256) + { + emit_insn (gen_clrstrsico (operands[0], operands[1])); + DONE; + } + else + { + rtx reg0 = gen_reg_rtx (TImode); + rtx reg1 = gen_reg_rtx (TImode); + rtx len = operands[1]; + + if (! CONSTANT_P (len)) + len = force_reg (DImode, len); + + /* Load up the address+length pairs. */ + + emit_move_insn (gen_rtx_SUBREG (DImode, reg0, 0), addr); + emit_move_insn (gen_rtx_SUBREG (DImode, reg0, 1), len); + + emit_move_insn (gen_rtx_SUBREG (DImode, reg1, 1), const0_rtx); + + /* Clear! */ + emit_insn (gen_clrstrsi_64 (reg0, reg1)); + DONE; + } + }") + + ; + ; clrstrsi instruction pattern(s). + ; + + (define_expand "clrstrsi" + [(set (match_operand:BLK 0 "general_operand" "") + (const_int 0)) + (use (match_operand:SI 1 "general_operand" "")) + (match_operand 2 "" "")] + "!TARGET_64BIT" + " + { + rtx addr = force_operand (XEXP (operands[0], 0), NULL_RTX); + + operands[0] = change_address (operands[0], VOIDmode, addr); + + if (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) < 256) + { + emit_insn (gen_clrstrsico (operands[0], operands[1])); + DONE; + } + else + { + rtx reg0 = gen_reg_rtx (DImode); + rtx reg1 = gen_reg_rtx (DImode); + rtx len = operands[1]; + + if (! CONSTANT_P (len)) + len = force_reg (SImode, len); + + /* Load up the address+length pairs. */ + + emit_move_insn (gen_rtx_SUBREG (SImode, reg0, 0), addr); + emit_move_insn (gen_rtx_SUBREG (SImode, reg0, 1), len); + + emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 1), const0_rtx); + + /* CLear! */ + emit_insn (gen_clrstrsi_31 (reg0, reg1)); + DONE; + } + }") + + ; Clear memory with length less than 256 bytes + + (define_insn "clrstrsico" + [(set (match_operand:BLK 0 "s_operand" "=Qo") + (const_int 0)) + (use (match_operand 1 "immediate_operand" "I")) + (clobber (reg:CC 33))] + "" + "xc\\t%O0(%1,%R0),%0" + [(set_attr "op_type" "RS") + (set_attr "atype" "mem")]) + + ; Clear memory with length greater 256 bytes or lenght not constant + + (define_insn "clrstrsi_64" + [(set (mem:BLK (subreg:DI (match_operand:TI 0 "register_operand" "d") 0)) + (const_int 0)) + (use (match_operand:TI 1 "register_operand" "d")) + (clobber (match_dup 0)) + (clobber (match_dup 1)) + (clobber (reg:CC 33))] + "TARGET_64BIT" + "mvcle\\t%0,%1,0\;jo\\t.-4" + [(set_attr "op_type" "NN") + (set_attr "atype" "mem") + (set_attr "cycle" "n") + (set_attr "length" "8")]) + + (define_insn "clrstrsi_31" + [(set (mem:BLK (subreg:SI (match_operand:DI 0 "register_operand" "d") 0)) + (const_int 0)) + (use (match_operand:DI 1 "register_operand" "d")) + (clobber (match_dup 0)) + (clobber (match_dup 1)) + (clobber (reg:CC 33))] + "!TARGET_64BIT" + "mvcle\\t%0,%1,0\;jo\\t.-4" + [(set_attr "op_type" "NN") + (set_attr "atype" "mem") + (set_attr "cycle" "n") + (set_attr "length" "8")]) + + ; + ; cmpstrdi instruction pattern(s). + ; + + (define_expand "cmpstrdi" + [(set (match_operand:DI 0 "register_operand" "") + (compare:DI (match_operand:BLK 1 "s_operand" "") + (match_operand:BLK 2 "s_operand" "") ) ) + (use (match_operand:DI 3 "general_operand" "")) + (use (match_operand:DI 4 "" ""))] + "TARGET_64BIT" + " + { + rtx addr0, addr1; + + /* for pre/post increment */ + operands[1] = protect_from_queue (operands[1], 0); + operands[2] = protect_from_queue (operands[2], 0); + operands[3] = protect_from_queue (operands[3], 0); + + addr0 = force_operand (XEXP (operan